JDBC与DBUtils的区别

说明:编译环境Eclipse(java)+MySql


使用JDBC查询数据库最不方便的一个地方在于,JDBC的executeQuey方法得到的是结果是一个结果集(ResultSet),实际应用时,需要用遍历的方法把一个个对象从ResultSet中取出来

<pre name="code" class="html">//rs为ResultSet对象
rs = stmt.executeQuery();
//将Result转换成List<Object[]>
int colCount = rs.getMetaData().getColumnCount();//得到查出的列的数量
while(rs.next()){
	Object[] oArr = new Object[colCount];//对应数据表中的一行,然后每一列都对应数组中的一个元素
	for (int i = 0; i < oArr.length; i++) {
	<span style="white-space:pre">	</span>oArr[i] = rs.getObject(i+1);
	}
<span style="white-space:pre">	</span>list.add(oArr);//把取得的对象放入list中
}


 对于自定义的类,还要进行类型转换,这时,可利用RowMapper接口 

public class UserRowMapper implements RowMapper<User> {

	@Override
	public Caller getEntity(ResultSet rs) throws SQLException {
		User user=new User()
		
		user.setId(rs.getInt("C_ID"));
		user.setCno(rs.getString("C_NO"));
		user.setCname(rs.getString("C_NAME"));
		user.setPassword(rs.getString("C_PASSWORD"));
		
		return user;
	}

}
while(rs.next()){
	User user= rm.getEntity(User);//RowMapper<User>rm=new UserRowMapper();
<span style="white-space: pre;">	</span>list.add(user);//把取得的对象放入list中

}

但是,每个类都需要一个与之对应的rowMapper,自定义的类比较多时也是很累的……

DBUtils就可以解决这个问题,只需要定义

ResultSetHandler<List<Person>> h = new BeanListHandler<Person>(Person.class);
执行的时候传进去就可以了,方便很多!!

List<Person> persons = run.query("SELECT * FROM Person", h);

但是,使用过程中却发现一个问题。

使用DBUtils时,类中的属性名和数据库中的表中的字段名必须一致,否则查询出来的数据和类中属性无法对应!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值