网站首页 > 开源技术 正文
1 DBUtils工具
1.1 简介DBUtils工具
DBUtils是Apache的工具,是一个对jdbc的简单封装的工具。提供了一些通用的jdbc操作方法。
1.2 使用步骤
1)导入jar包
commons-dbutils-1.2.jar
2)使用的API
QueryRunner类: 通过此类可以执行更新操作或者查询操作。
update(.....): 用于更新操作(DDL、DML)
query(.....): 用于查询操作(DQL)
ResultSetHandler接口:用于封装查询之后的结果。
Object handle(ResultSet rs) : 用于封装数据
常用的实现类:
ArrayHandler: 把结果集的第一行的数据封装成对象数组。
ArrayListHandler:把结果集的每一行数据封装对象数组,把这个对象数组放入List中
BeanHandler: 把结果集的第一行数据封装成javabean
BeanListHandler: 把结果集的每一行数据封装成javabean,把这个javabean放入LIs中
ScalarHandler: 把结果集的第一行第一列取出。通常用于聚合函数查询。例如(count()/max())
如果表的字段名称和javabean的属性名称不一致时,需要自定义ResultSetHandler的实现类
3)更新方法
/** * 使用dbutils工具 */ public class Demo1 { @Test public void testInsert() throws Exception{ ComboPooledDataSource ds = new ComboPooledDataSource(); //1.创建QueryRunner对象 QueryRunner qr = new QueryRunner(ds); //2.执行操作 //qr.update("INSERT INTO student(NAME,age,address) VALUES('张三11',20,'广州天河')"); qr.update("INSERT INTO student(NAME,age,address) VALUES(?,?,?)", new Object[]{"eric11",20,"广州天河"}); } @Test public void testInsert2() throws Exception{ ComboPooledDataSource ds = new ComboPooledDataSource(); Connection conn = ds.getConnection(); QueryRunner qr = new QueryRunner(); qr.update(conn,"INSERT INTO student(NAME,age,address) VALUES('张三22',20,'广州天河')"); //手动关闭连接 conn.close(); } } |
4)查询方法
/** * dbutils执行查询操作 */ public class Demo2 { /** * ArrayHandler: 把结果集的第一行的数据封装成对象数组。 */ @Test public void test1() throws Exception{ ComboPooledDataSource ds = new ComboPooledDataSource(); //1.创建QueryRunner QueryRunner qr = new QueryRunner(ds); //2.执行sql Object[] arr = (Object[])qr.query("select * from student where id=?", new ArrayHandler(),new Object[]{2}); for(Object obj:arr){ System.out.println(obj); } } /** * ArrayListHandler: 把结果集的每一行数据封装对象数组,把这个对象数组放入List中 * @throws Exception */ @Test public void test2() throws Exception{ ComboPooledDataSource ds = new ComboPooledDataSource(); //1.创建QueryRunner QueryRunner qr = new QueryRunner(ds); //2.执行sql List<Object[]> list = (List<Object[]>)qr.query("select * from student", new ArrayListHandler()); for(Object[] arr:list){//一行 //一列 for(Object obj:arr){ System.out.print(obj+"\t"); } System.out.println(); } } /** * BeanHandler: 把结果集的第一行数据封装成javabean * 约定前提: 表的字段名称和javabean的属性名称保持一致!! */ @Test public void test3() throws Exception{ ComboPooledDataSource ds = new ComboPooledDataSource(); //1.创建QueryRunner QueryRunner qr = new QueryRunner(ds); //2.执行sql Student student = (Student)qr.query("select * from student", new BeanHandler(Student.class)); System.out.println(student); } /** * BeanListHandler: 把结果集的每一行数据封装成javabean,把这个javabean放入LIst中 * 约定前提: 表的字段名称和javabean的属性名称保持一致!! */ @Test public void test4() throws Exception{ ComboPooledDataSource ds = new ComboPooledDataSource(); //1.创建QueryRunner QueryRunner qr = new QueryRunner(ds); //2.执行sql List<Student> list = (List<Student>)qr.query("select * from student", new BeanListHandler(Student.class)); for (Student student : list) { System.out.println(student); } } /** * ScalarHandler: 把结果集的第一行第一列取出。通常用于聚合函数查询。例如(count()/max()) */ @Test public void test5() throws Exception{ ComboPooledDataSource ds = new ComboPooledDataSource(); //1.创建QueryRunner QueryRunner qr = new QueryRunner(ds); //2.执行sql Long count = (Long)qr.query("select count(id) from student", new ScalarHandler(1)); System.out.println("行数: "+count); } /** * 如果表的字段名称和javabean的属性名称不一致时,需要自定义ResultSetHandler的实现类 */ @Test public void test6() throws Exception{ ComboPooledDataSource ds = new ComboPooledDataSource(); //1.创建QueryRunner QueryRunner qr = new QueryRunner(ds); List<Student> list = (List<Student>)qr.query("select * from student2", new MyStudentHandler()); for (Student student : list) { System.out.println(student); } } } /** * 自定义ResultSetHandler */ class MyStudentHandler implements ResultSetHandler{ @Override public Object handle(ResultSet rs) throws SQLException { List<Student> list = new ArrayList<Student>(); while(rs.next()){ Student s = new Student(); s.setId(rs.getInt("sid")); s.setName(rs.getString("sname")); s.setAge(rs.getInt("sage")); s.setAddress(rs.getString("saddress")); list.add(s); } return list; } } |
猜你喜欢
- 2024-09-19 将Sentinel监控数据持久化到外部InfluxDB时间序列数据库
- 2024-09-19 【每日一学】解锁数据库之门:深入探讨JDBC技术的奇妙世界
- 2024-09-19 成为优秀的Java程序员要具备哪些技能?
- 2024-09-19 Java架构师的10个学习经验,不可错过
- 2024-09-19 软件测试学习教程——JDBC开发(jdbc 测试)
- 2024-09-19 文科妹子都能看懂Mybatis快速入门教程
- 2024-09-19 如何通过连接池提高API性能(连接池获取连接)
- 2024-09-19 应大家需要,Java常用开发工具汇总来了
- 2024-09-19 jSqlBox 4.0.8 发布,在 Java 里直接写 SQL 的 ORM 工具
- 2024-09-19 一行代码搞定数据库操作 ThinkJDBC
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)