DBUtils
2016-05-15 12:46
211 查看
上次学到dbcp或者c3p0可创建连接池,但是Connection创建了,用什么来访问数据呢,答案是:DBUtils进行CRUD操作即可。
QueryRunner() //不带事务的话,用这个就可以啦。
QueryRunner(DataSource ds) //如果用到事务,则需要带datasource的构造器。
DBUtils将PreparedStatement进行封装,不需要用户自己进行繁琐的处理。
在查询中只需要通过实现ResultSetHandler接口,实现handle方法,处理ResultSet即可。
query(Connection conn, String sql, ResultSetHandler<T> rsh, param1, param2)
BeanHandler,返回记录中的第一条记录,并且转为指定的Bean对象。
※注意:由于BeanHandler是通过反射来创建对应类的,所以指定的类必须有一个public的无参构造器。
{name=student1, sex=Female, age=20}
<完>
QueryRunner类
顾名思义,该类是用来执行Query语句的。其中构造方法有QueryRunner() //不带事务的话,用这个就可以啦。
QueryRunner(DataSource ds) //如果用到事务,则需要带datasource的构造器。
删除、追加、修改
Connection conn = DBUtils.getConnection(); String delete = "delete from student where name=?"; String insert = "insert into student (name) values(?)"; String modify = "update student set name=? where id=?"; //执行sql语句 QueryRunner queryRunner = new QueryRunner(); queryRunner.update(conn, insert, "hello"); queryRunner.update(conn, delete, "hello");
原始方式查询
String sql=“select name from student where id=?”;DBUtils将PreparedStatement进行封装,不需要用户自己进行繁琐的处理。
在查询中只需要通过实现ResultSetHandler接口,实现handle方法,处理ResultSet即可。
query(Connection conn, String sql, ResultSetHandler<T> rsh, param1, param2)
public class DBUtilsTest { public static void main(String[] args) throws Exception{ Connection conn = DAO.getConnection(); QueryRunner queryRunner = new QueryRunner(); String sql = "select name, sex, age from student where id="; class MyResultSetHandler implements ResultSetHandler<List<Student>>{ @Override public List<Student> handle(ResultSet arg0) throws SQLException { List<Student> list = new ArrayList<Student>(); while(arg0.next()) { Student s = new Student(arg0.getString(1), arg0.getString(2), arg0.getInt(3)); list.add(s); } return list; } } List<Student> rs= queryRunner.query(conn, sql, new MyResultSetHandler()); for(Student s:rs){ System.out.println(s); } } }
高级的BeanHandler举例
上面说的实现ResultSetHanlder,其实在DBUtils中已经有很多默认的实现方法,用起来更方便。BeanHandler,返回记录中的第一条记录,并且转为指定的Bean对象。
※注意:由于BeanHandler是通过反射来创建对应类的,所以指定的类必须有一个public的无参构造器。
public class <span style="font-family: Arial, Helvetica, sans-serif;">DBUtilsTest </span> { public static void main(String[] args) throws Exception{ Connection conn = DAO.getConnection(); QueryRunner queryRunner = new QueryRunner(); String sql = "select name, sex, age from student where id=?"; Student rs= queryRunner.query(conn, sql, new BeanHandler<Student>(Student.class), 3); System.out.println(rs); } }
BeanListHandler举例:
public class DBUtilsTest { public static void main(String[] args) throws Exception{ Connection conn = DAO.getConnection(); QueryRunner queryRunner = new QueryRunner(); String sql = "select name, sex, age from student"; List<Student> rs= queryRunner.query(conn, sql, new BeanListHandler<Student>(Student.class)); System.out.println(rs); } }
MapHandler,MapListHandler
也可以不用集合,用MapHandler,MapListHandler返回键值对的形式。代码和上面一样不再重复。{name=student1, sex=Female, age=20}
ScalarHandler,返回一个单个值。
public class DBUtilsTest { public static void main(String[] args) throws Exception{ Connection conn = DAO.getConnection(); QueryRunner queryRunner = new QueryRunner(); String sql = "select count(id) from student"; Long rs= queryRunner.query(conn, sql, new ScalarHandler<Long>(), 3); System.out.println(rs); } }
<完>
相关文章推荐
- Sublime Text 3 python和Package Control配置方法
- Some Chinese Android Developers Information
- spring基础知识汇总及常见面试题目总结
- 如何在PowerDesigner将PDM导出生成WORD文档或者html文件
- 列车调度(Train)
- [mac]
- 文章标题
- (版本定制)第6课:Spark Streaming源码解读之Job动态生成和深度思考
- 实现树莓派控制电机的运转
- Smalidea无源码调试 android 应用
- PowerDesigner反向工程PostgreSQL数据库
- jquery动画切换引擎插件 Velocity.js 学习01
- llinux企业常用服务---samba共享
- 博客搬家至博客园
- [转载]WiFi有死角? 巧用旧无线路由器扩展覆盖
- 企业的IT 建设的三个过程
- 算法:将序列中的循环左移右移p个位置
- 无刷新天气预报
- 快速排序的多种语言代码实现
- Android传感器