实用JDBC数据库查询封装

很实用的封装,适用于仅使用JDBC操作数据库的时候。查询数据库后直接封装javabean对象到集合中,免去了繁琐的迭代每条记录然后逐个取字段封装javaBean.

当然是存在很多的不方便的地方的,比如数据库字段名和javabean属性名需要一致的情况下才能被封装到javabean中, 以下代码中也还缺少判断javabean中的属性是否对应在数据库查询中存在, 但是这个看看API就可以当场搞定的事情。不再废话


public static List queryList(String preSql, String className,
Connection con, int offset, int pagelength) throws PortalException
{
List beanbasket = new ArrayList();
String[] columns = null;
if (con == null)
{
con = getConnection();
}
//查询出的结果集
ResultSet rs = null;
PreparedStatement pstmt = null;
try
{
pstmt = con.prepareStatement(preSql);
if (pagelength != 0)
{
int endnum = offset+pagelength;
int stratnum = offset+1;
pstmt.setInt(1, endnum);
pstmt.setInt(2, stratnum);
}
LogFactory.debug("will query the data!!");
rs = pstmt.executeQuery();
LogFactory.debug("query the data success!!!");

ResultSetMetaData metedata = rs.getMetaData();
//获取查询出的字段总数
int i = metedata.getColumnCount();
//获取数据库表中所有的字段名
columns = new String[i];
for (int j = 1; j < i+1; j++)
{
columns[j-1] = metedata.getColumnName(j);
}

Class clazz = Class.forName(className);
Field[] fields = clazz.getDeclaredFields();

LogFactory.debug("the fields length is:"
+ fields.length);

while (rs.next())
{

Object obj = clazz.newInstance();

for (Field f : fields)
{
//如果该字段在数据库中有存储
if(isContainField(f.getName(),columns)){

f.setAccessible(true);
String strType = f.getType().toString();

if (strType.indexOf("Long") != -1)
{
f.set(obj, rs.getLong(f.getName()));
}
else if (strType.indexOf("Integer") != -1
|| strType.indexOf("int") != -1)
{
f.set(obj, rs.getInt(f.getName()));
}
else if (strType.indexOf("String") != -1)
{
String s = rs.getString(f.getName());
if(s!=null&&!s.equals("null"))
{
s =s.trim();
}
else
{
s = "";
}
f.set(obj, s);
}
else if (strType.indexOf("Date") != -1)
{
f.set(obj, rs.getDate(f.getName()));
}
else if (strType.indexOf("Double") != -1)
{
f.set(obj, rs.getDouble(f.getName()));
}
else if (strType.indexOf("Float") != -1)
{
f.set(obj, rs.getFloat(f.getName()));
}
else
{
LogFactory.debug(
"this data type not support yet!");
LogFactory.debug("this date type is"
+ f.getName());
}

}
beanbasket.add(obj);
}
}
catch (Exception ex)
{
}

LogFactory.info("Exit DBProxy.querylist()");
return beanbasket;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值