package org.jplus.hyb.database;
import java.util.ArrayList;
import java.util.List;
/**
* 自动生成SQL语句
*
* @version 1.2
* @author hyberbin
*/
public class GetSql {
private List fields;//条件字段列表
private List values;//条件值列表
private List conditions;//条件列表
/**
* 构造方法
*/
public GetSql() {
fields = new ArrayList();
values = new ArrayList();
conditions = new ArrayList();
}
/**
* 添加一个字段
* @param field
* @param value
*/
public void add(String field, String value) {
fields.add(field);
values.add(value);
conditions.add("");
}
/**
*
* @param field
* @param value
* @param condition
*/
public void add(String field, String value, String condition) {
fields.add(field);
values.add(value);
if (condition == null) {
conditions.add("");
} else if (condition.equals("where")) {
conditions.add("where");
} //如果为null,表示值为空时不update该值
else if (condition.equals("null")) {
conditions.add("null");
} else {
conditions.add("");
}
}
/**
* 得到insert语句
*
* @param from
* @return 插入语句
*/
public String getInsert(String from) {
StringBuilder insertString = new StringBuilder();
StringBuffer fieldsString = new StringBuffer();
StringBuffer valuesString = new StringBuffer();
for (int i = 0; i < fields.size(); i++) {
if (values.get(i) != null && !values.get(i).equals("")) {
fieldsString.append(fields.get(i)).append(",");
valuesString.append(values.get(i)).append(",");
}
}
if (fieldsString.length() > 0) {
fieldsString.deleteCharAt(fieldsString.length() - 1).insert(0, "(").append(")");
}
if (valuesString.length() > 0) {
valuesString.deleteCharAt(valuesString.length() - 1).insert(0, "(").append(")");
}
insertString.append("insert into ").append(from).append(fieldsString).append(" values").append(valuesString);
return insertString.toString();
}
/**
* 得到update语句
*
* @param from
* @return 更新语句
*/
public String getUpdate(String from) {
StringBuilder updateString = new StringBuilder();
StringBuffer valuesString = new StringBuffer();
StringBuffer conditionsString = new StringBuffer();
String field, value, quote;
for (int i = 0; i < fields.size(); i++) {
field = (String) fields.get(i);
value = (String) values.get(i);
if ("".equals(value)) {
value = null;
}
if (conditions.get(i).equals("")) {
valuesString.append(field).append("=").append(value).append(",");
} else if (conditions.get(i).equals("null")) {
if (value != null) {
valuesString.append(field).append("=").append(value).append(",");
}
} else {
conditionsString.append(" and ").append(field).append(" = ").append(value);
}
}
if (valuesString.length() > 0) {
valuesString.deleteCharAt(valuesString.length() - 1);
}
if (conditionsString.length() > 0) {
conditionsString.delete(0, 4);
}
updateString.append("update ").append(from).append(" set ").append(valuesString).append(" where").append(conditionsString);
return updateString.toString();
}
/**
*
* @param selectString
* @return 查询语句
*/
public String getQuery(String selectString) {
return getQuery(selectString, "");
}
/**
* 得到查询语句
*
* @param selectString select子句
* @param orderby orderby子句
* @return 查询语句
*/
public String getQuery(String selectString, String orderby) {
StringBuilder queryString = new StringBuilder();
StringBuffer conditionsString = new StringBuffer();
String field, value, quote;
for (int i = 0; i < fields.size(); i++) {
field = (String) fields.get(i);
value = (String) values.get(i);
if (value != null && !value.equals("")) {
conditionsString.append(" and ").append(field).append(" = ").append(value);
}
}
if (selectString.indexOf("where") == -1) {
conditionsString.delete(0, 5).insert(0, "where");
}
queryString.append(selectString).append(" ").append(conditionsString).append("").append(orderby);
return queryString.toString();
}
/**
* 得到sqlserver的分面显示语句
*
* @param tableName 表名
* @param strWhere Where
* @param key 关键词
* @param strOrder
* @param pageSize 页尺寸
* @param top 从第几条开始
* @return sqlserver的分面显示语句
*/
public String sqlserverPageSql(String tableName, String strWhere, String key, String strOrder, int pageSize, int top) {
String strSQL;
String strTmp;
if (strOrder.contains("desc")) {
strTmp = "<(select min";
strOrder = " order by " + key + " desc";
} else {
strTmp = ">(select max";
strOrder = " order by " + key + " asc";
}
//如果是第一页就执行以上代码,这样会加快执行速度
if (top == 0) {
if (!strWhere.equals("")) {
strSQL = "select top " + pageSize + " * from " + tableName + strWhere + strOrder;
} else {
strSQL = "select top " + pageSize + " * from " + tableName + strOrder;
}
} //以下代码赋予了strSQL以真正执行的SQL代码
else {
strSQL = "select top " + pageSize + " * from " + tableName + key + strTmp + "(" + key + ") from (select top " +top + " " + key + " from " + tableName + strOrder + ") as tblTmp)" + strOrder;
if (!strWhere.equals("")) {
strSQL = "select top " + pageSize + " * from " + tableName + key + strTmp + "(" + key + ") from (select top " + top + " " + key + " from " + tableName + strWhere + strOrder + ") as tblTmp) and " + strWhere.replaceFirst("where", "") + strOrder;
}
}
return strSQL;
}
}