JDBC与DBUtils的区别

来源:互联网 发布:移动4g网络差怎么办 编辑:程序博客网 时间:2024/05/23 02:00

说明:编译环境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> {@Overridepublic 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时,类中的属性名和数据库中的表中的字段名必须一致,否则查询出来的数据和类中属性无法对应!!



0 0
原创粉丝点击