蒙恩招生网 蒙恩招生网4
2023-10-30
更新时间:2023-11-17 07:22:09作者:51data
之前写过DBUtil和分页处理的介绍,参考连接:DBUtil和分页实现。
1.概述DBUtils封装了JDBC的操作,简化了JDBC的操作,可以写更少的代码。不使用框架,使用DBUtils的概率非常高。
DBUtils的三个核心功能介绍:
QueryRunner类,为sql语句操作提供APIResultSetHandler接口,用于定义select操作后如何封装结果集DbUtils类。它是一个工具类,定义了关闭资源和事务处理的方法。2.QueryRunner核心类QueryRunner(数据库ds),提供数据源(连接池),DBUtils底层自动维护连接更新(字符串SQL,对象.params)来更新数据。(添加、删除、更改)查询(字符串SQL,结果集处理程序rsh,对象.params),执行查询3。ResultSetHandler结果处理集类我们知道,执行select语句后,我们得到resultset,然后需要对resultset进行转换,得到我们想要的最终数据。您可能希望将ResultSet的数据放在一个列表中,或者希望将数据放在一个Map或Bean中。
DBUtils提供了一个接口ResultSetHandler,这是一个将ResultSet转换为目标类型的工具。您可以自己实现这个接口,并将ResultSet转换成您想要的类型。
DBUtils提供了ResultSetHandler接口的很多实现,这些实现基本上足够了。我们通常不需要自己实现ResultSet接口。
MapHandler:单线处理器!将结果集转换为Map,其中列名为key maplishandler:Multiline Processor!将结果集转换为列表;BeanHandler:单行处理器!要将结果集转换成Bean,处理器需要Class参数,即Bean的类型;多线处理器!将结果集转换为列表;ColumnListHandler:多行单列处理器!若要将结果集转换为列表,需要在使用ColumnListHandler时指定列的名称或编号。例如,new columlishandler(“name”)意味着将name列的数据放入列表中。ScalarHandler:单行处理器!将结果集转换为Object。一般用于聚合查询,如select count(*) from tab_student。地图处理器:
每个记录充当一个映射,映射的关键字是字段名称。
Bean处理器:
你必须得到一个javaBean。
色谱柱处理器:
标量处理器:
(4)DbUtils工具类
Close quiet (connectionconn)关闭连接,如果有异常尝试,不要抛出CommitandClosequiet(connection conn)提交并关闭连接。RollbackandClosequiet(connection conn)回滚并关闭连接。3.应用程序示例-添加、删除和检查Bean对象类用户:
公共类用户{ private int uid私有字符串uname私有字符串upasswordpublic User(){ } public int getUid(){ return uid;} public void setUid(int uid){ this . uid=uid;} public String getUname(){ return uname;} public void setUname(String uname){ this . uname=uname;} public String getup password(){ return up password;} public void setup password(String up password){ this . up password=up password;}}数据库连接工具类
导入Java . SQL . connection;导入Java . SQL . SQL exception;导入javax . SQL . data source;导入com . m change . v2 . c3p 0 . combobooleddatasource;公共类c 3p 0 utils { private static combobooleddatasource data source=new combobooleddatasource(' ithe IMA ');公共静态数据源get data source(){ return data source;}公共静态连接getConnection(){ try { return data source . getConnection();} catch(SQLException e){ throw new runtime exception(e);}}}添加、删除和修改:
导入Java。SQL。SQL异常;导入org。阿帕奇。公地。dbutils。查询运行器;导入org。朱尼特。测试;导入cn。我是IMA。JDBC。utils。c3po utils;/** * 测试DBUtils工具类的增删改操作* */公共类TestDBUtils1 { /** *添加所有用户方法*/@ Test public void testAddUser(){ try {//1 .创建核心类query runner query runner QR=new query runner(c 3p 0 utils。获取数据源());//2.编写结构化查询语言语句string SQL=' insert into user values(null,)'//3.为占位符设置值Object[] params={ '薛淮' '赵耿' };//4.执行添加操作int rows=qr.update(sql,params);if (rows 0) { System.out.println('添加成功!');} else { System.out.println('添加失败!');} } catch (SQLException e) { //TODO自动生成的捕捉块e . printstacktrace();} } /** * 根据身份证明(识别)修改用户方法* */@ Test public void testUpdateUserById(){ try {//1 .创建核心类query runner query runner QR=new query runner(c 3p 0 utils。获取数据源());//2.编写结构化查询语言语句string SQL=“更新用户设置密码=其中uid=”;//3.为站位符设置值Object[] params={ 'xxx '21 };//4.执行添加操作int rows=qr.update(sql,params);if (rows 0) { System.out.println('修改成功!');} else { System.out.println('修改失败!');} } catch (SQLException e) { //TODO自动生成的捕捉块e . printstacktrace();} } /** * 根据身份证明(识别)删除用户方法*/@ Test public void testDeleteUserById(){ try {//1 .创建核心类query runner query runner QR=new query runner(c 3p 0 utils。获取数据源());//2.编写结构化查询语言语句字符串SQL=' delete from user where uid=//3。为站位符设置值object[]params={ 19 };//4.执行添加操作int rows=qr.update(sql,params);if (rows 0) { System.out.println('删除成功!');} else { System.out.println('删除失败!');} } catch (SQLException e) { //TODO自动生成的捕捉块e . printstacktrace();} }}TestDBUtils1.java -添加、删除、更新查询示例:
导入Java。SQL。SQL异常;导入Java。util。列表;导入Java。util。地图;导入org。阿帕奇。公地。dbutils。查询运行器;导入org。阿帕奇。公地。dbutils。经手人。bean处理程序;导入org。阿帕奇。公地。dbutils。经手人。beanlisthandler导入org。阿帕奇。公地。dbutils。经手人。columnlisthandler导入org。阿帕奇。公地。dbutils。经手人。映射列表处理程序;导入org。阿帕奇。公地。dbutils。经手人。标量处理程序;导入org。朱尼特。测试;导入cn。我是IMA。域。用户;导入cn。我是IMA。JDBC。utils。c3po utils;/** * 测试DBUtils查询操作* */公共类TestDBUtils2 { /* *查询所有用户方法*/@ Test public void testQueryAll(){ try {//1 .获取核心类query runner query runner QR=new query runner(c 3p 0 utils。获取数据源());//2.编写结构化查询语言语句字符串sql=' select * from user//3。执行查询操作List users=qr.query(sql,new BeanListHandler(user。类));//4.对结果集集合进行遍历对于(用户用户:用户){系统。出去。println(用户。getuname()“:”用户。getup password());} } catch(SQLException e){抛出新的运行时异常(e);} } /* * 根据id查询用户方法*/@ Test public void testQueryUserById(){ try {//1 .获取核心类query runner query runner QR=new query runner(c 3p 0 utils。获取数据源());//2.编写结构化查询语言语句string SQL=' select * from user where uid='//3.为占位符设置值object[]params={ 21 };//4.执行查询操作User user=qr.query(sql,new BeanHandler(User.class),params);系统。出去。println(用户。getuname()“:”用户。getup password());} catch(SQLException e){抛出新的运行时异常(e);} } /* * 根据所有用户的总个数*/@ Test public void testQueryCount(){ try {//1 .获取核心类query runner query runner QR=new query runner(c 3p 0 utils。获取数据源());//2.编写结构化查询语言语句string SQL=' select count(*)from TBL _用户'//4.执行查询操作Long count=(Long) qr.query(sql,新标量处理程序());系统。出去。println(计数);} catch(SQLException e){抛出新的运行时异常(e);} } /* *查询所有用户方法*/@ Test public void testqueryall 1(){ try {//1 .获取核心类query runner query runner QR=new query runner(c 3p 0 utils。获取数据源());//2.编写结构化查询语言语句字符串sql=' select * from user//3。执行查询操作List list=qr.query(sql,new maplishandler());//4.对结果集集合进行遍历for(Map Map:list){ system。出去。println(地图);} } catch(SQLException e){抛出新的运行时异常(e);} } /* *查询所有用户方法*/@ Test public void testqueryal 2(){ try {//1 .获取核心类query runner query runner QR=new query runner(c 3p 0 utils。获取数据源());//2.编写结构化查询语言语句字符串sql=' select * from user//3。执行查询操作List list=qr.query(sql,new ColumnListHandler(' uname '));//4.对结果集集合进行遍历for(Object Object:list){ system。出去。println(对象);} } catch(SQLException e){抛出新的运行时异常(e);} } }//testdbutils 2。Java-查询操作【注意】:DBUtils在创建QueryRunner时传入数据源对象,每次在执行完之后都会自动关闭关系连接对象。(就相当于把指挥操舵交给dbutils管理了,他会帮我们关掉)
如果没有传入数据源的话,需要手动关闭。