您的位置:首页 > 编程语言 > Java开发

java 数据库查询工具类.

2016-01-15 13:30 447 查看
import java.util.List;
import java.util.Map;

/**
* 数据库查询工具类.
*
*/
public class QueryTool {

/**
* Checks if is condition.
*
* @param obj the obj
* @return true, if is condition
*/
public static boolean isCondition(Object obj) {
if ("".equals(getString(obj)))
return false;
else
return true;
}

/**
* Gets the string from Object,null值转换为空字符串.
*
* @param obj the obj
* @return the string
*/
public static String getString(Object obj) {
return obj != null ? obj.toString() : "";
}

/**
* 拼接sql in条件.
*
* @param columnKey the column key
* @param columnValueList the column value list
* @param joinOp the join op
* @param sb the sb
*/
public static void appendConditionIn(String columnKey, List<String> columnValueList,
String joinOp, StringBuffer sb) {
if (QueryTool.isCondition(columnValueList)) {
sb.append(" " + joinOp + " " + columnKey + " in " + QueryTool.listToSqlIn(columnValueList));
}
}

/**
* 拼接sql 条件.
*
* @param columnKey the column key
* @param columnValue the column value
* @param joinOp the join op
* @param op the op
* @param sb the sb
* @param paramsList the params list
*/
public static void appendCondition(String columnKey, Object columnValue,
String joinOp, String op, StringBuffer sb, List<Object> paramsList) {
if (QueryTool.isCondition(columnValue)) {
sb.append(" " + joinOp + " " + columnKey + " " + op + " ?");
paramsList.add(columnValue);
}
}

/**
* 生产分页sql.
*
* @param sql the sql
* @param pageIndex the page index
* @param pageSize the page size
* @param paramsList the params list
* @return the string
*/
public static String buildPageSql(String sql, int pageIndex, long pageSize,
List<Object> paramsList) {
long fromRowNum = pageSize * (pageIndex - 1) + 1;
long toRowNum = pageSize * pageIndex;
StringBuffer sbNewSql = new StringBuffer();

sbNewSql.append("select x.*");
sbNewSql.append(" from (select rownum x_rownum,o.* from (").append(sql)
.append(") o) x");
sbNewSql.append(" where x_rownum>= ?").append(" and x_rownum<= ?");
sbNewSql.append(" order by x.x_rownum");
paramsList.add(fromRowNum);
paramsList.add(toRowNum);

return sbNewSql.toString();
}

/**
* 生成统计sql.
*
* @param sql the sql
* @return the string
*/
public static String buildCountSql(String sql) {
return "select count(*) from (" + sql + ")";
}

/**
* 取得map中对应数据,为null或空时转换为缺省值.
*
* @param map the map
* @param name the name
* @param replace the replace
* @return the property
*/
public static String getProperty(Map<String, ?> map, String name,
String replace) {
return map.get(name) != null
&& map.get(name).toString().trim().length() > 0 ? map.get(name)
.toString() : replace;
}

/**
* List to sql in.
*
* @param stringList the string list
* @return the string
*/
public static String listToSqlIn(List<String> stringList) {
StringBuilder sb = new StringBuilder();

if (stringList == null || stringList.size() == 0)
return "";

for (String string : stringList) {

if (sb.length() == 0)
sb.append(" ('").append(string).append("'");
else
sb.append(",'").append(string).append("'");
}

sb.append(") ");

return sb.toString();
}

/**
* 根据***取得性别.
*
* @param val the val
* @return the sex from id
*/
public static boolean getSexFromID(String val) {
boolean sex = false;
// 15位***号码
if (15 == val.length()) {
if (Integer.valueOf(val.charAt(14) / 2) * 2 != val.charAt(14))
sex = true;
else
sex = false;
}
// 18位***号码
if (18 == val.length()) {
if (Integer.valueOf(val.charAt(16) / 2) * 2 != val.charAt(16))
sex = true;
else
sex = false;
}
return sex;
}

/**
* ***号15转18位
*
* @author cjj 2010-5-13下午01:04:53
* @param id
* @return
*/
public static final String getNewEighteenId(String id) {

final int[] W = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,
1 };
final String[] A = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3",
"2" };
int i, j, s = 0;
String newid;
newid = id;
newid = newid.substring(0, 6) + "19" + newid.substring(6, id.length());
for (i = 0; i < newid.length(); i++) {
j = Integer.parseInt(newid.substring(i, i + 1)) * W[i];
s = s + j;
}
s = s % 11;
newid = newid + A[s];

return newid;

}

/**
* ***号18转15位
*
* @author cjj 2010-5-13下午02:06:51
* @param id
* @return
*/
public static String getNewFifteenId(String id) {
String newid = id.substring(0, 6) + id.substring(8, id.length() - 1);
return newid;
}

/**
* ***号15,18位互换.
*
* @param id the id
* @return the exchange p id
*/
public static String getExchangePId(String id) {
if (id.length()==15)
return getNewEighteenId(id);
else if (id.length()==18)
return getNewFifteenId(id);
else
return id;
}

}

使用:

public Page findLoginRecordList(String machineCode,String pageIndex,String pagesize){
int pageIndexInt=Integer.valueOf(pageIndex);
int pagesizeInt=Integer.valueOf(pagesize);
List<Object> paramsList = new ArrayList<Object>(); //定义一个拼接参数的集合
StringBuffer s = new StringBuffer();
s.append("select t.certNo, t.CLIENT,t.TYPE, to_char(t.inouttime,'mm/dd hh24:mi:ss') as INOUTTIME from DC_LOGINRECORD t where 1=1 ");
QueryTool.appendCondition("t.machinecode",machineCode,"AND","=" ,s, paramsList);//拼接条件
s.append(" order by t.inouttime desc");
String sql = QueryTool.buildCountSql(s.toString()); //查询总数的sql
long totalSize = this.queryForInt(sql,paramsList.toArray(new Object[paramsList.size()])); //jdbc查询
if(totalSize > 0){
String sl = QueryTool.buildPageSql(s.toString(), pageIndexInt,pagesizeInt , paramsList);//拼接分页
List<Map<String,Object>> list = this.queryForList(sl,paramsList.toArray(new Object[paramsList.size()])); //jdbc查询
int start = pagesizeInt *(pageIndexInt -1)+1; //本页数据在数据库中的起始位置
return new Page(pagesizeInt *(start -1)+1, totalSize, pagesizeInt, list);
}else{
return new Page(0, 0, 10, new ArrayList());
}
}

备注:
分页的类:

import java.io.Serializable;
import java.util.ArrayList;

/**
* 分页对象. 包含数据及分页信息.
*/
public class Page implements Serializable {

static private int DEFAULT_PAGE_SIZE = 20;

/**
* 每页的记录数
*/
private int pageSize = DEFAULT_PAGE_SIZE;

/**
* 当前页第一条数据在List中的位置,从0开始
*/
private int start;

/**
* 当前页中存放的记录,类型一般为List
*/
private Object data;

/**
* 总记录数
*/
private long totalCount;

/**
* 构造方法,只构造空页
*/
public Page() {
this(0, 0, DEFAULT_PAGE_SIZE, new ArrayList());
}

/**
* 默认构造方法
*
* @param start
* 本页数据在数据库中的起始位置
* @param totalSize
* 数据库中总记录条数
* @param pageSize
* 本页容量
* @param data
* 本页包含的数据
*/
public Page(int start, long totalSize, int pageSize, Object data) {
this.pageSize = pageSize;
this.start = start;
this.totalCount = totalSize;
this.data = data;
}

/**
* 取数据库中包含的总记录数
*/
public long getTotalCount() {
return this.totalCount;
}

/**
* 取总页数
*/
public long getTotalPageCount() {
if (totalCount % pageSize == 0)
return totalCount / pageSize;
else
return totalCount / pageSize + 1;
}

/**
* 取每页数据容量
*/
public int getPageSize() {
return pageSize;
}

/**
* 当前页中的记录
*/
public Object getResult() {
return data;
}

/**
* 取当前页码,页码从1开始
*/
public int getCurrentPageNo() {
return start / pageSize + 1;
}

/**
* 是否有下一页
*/
public boolean hasNextPage() {
return this.getCurrentPageNo() < this.getTotalPageCount() - 1;
}

/**
* 是否有上一页
*/
public boolean hasPreviousPage() {
return this.getCurrentPageNo() > 1;
}

/**
* 获取任一页第一条数据的位置,每页条数使用默认值
*/
protected static int getStartOfPage(int pageNo) {
return getStartOfPage(pageNo, DEFAULT_PAGE_SIZE);
}

/**
* 获取任一页第一条数据的位置,startIndex从0开始
*/
public static int getStartOfPage(int pageNo, int pageSize) {
return (pageNo - 1) * pageSize;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息