DBUtils是是一个对JDBC进行简单封装的开源工具类库,主要是封装了JDBC的代码。
DbUtils类: 连接数据库对象----jdbc辅助方法的集合类,线程安全。 构造方法:DbUtils() 作用:控制连接,控制书屋,控制驱动加载额一个类。
QueryRunner类: SQL语句的操作对象,可以设置查询结果集的封装策略,线程安全。 构造方法: (1)QueryRunner():创建一个与数据库无关的QueryRunner对象,后期再操作数据库的会后,需要手动给一个Connection对象,它可以手动控制事务。
Connection.setAutoCommit(false) :设置手动管理事务 Connection.commit(): 提交事务
(2)QueryRunner(DataSource ds):创建一个与数据库关联的queryRunner对象,后期再操作数据库的时候,不需Connection对象自动管理事务。 DataSource:数据库连接池对象。
主要的三个方法: 1.query():用于执行查询语句 2.update():用于执行增删改语句 3.batch():用于执行批处理
ResultSetHandler接口:封装数据的策略对象——将封装结果集中的数据,转换到另一个对象 策略:封装数据到对象的方式(示例:将数据库保存在User、保存到数组、保存到集合)
ResultSetHandler结果集处理类:
对于数据库操作,就是增删改查。 1) 在进行查询(select)时,对于直接利用JDBC API访问数据库时,大多都采用两种返回值,一种是取得的结果集是List,一种是实体类(VO)。 2) 在进行增删改(insert,update,delete)时,对于直接利用JDBC API访问数据库时,返回值一般都是void,因为在增删改之后成功无结果集返回。
insert语句:
public static void insert(){ QueryRunner qr = new QueryRunner(); String sql = "insert into student values(01,'李华',15)"; Connection conn = null; try { conn = JDBCUtils.getConnection(); int count = qr.update(conn,sql); System.out.println(count); DbUtils.closeQuietly(conn); } catch (SQLException e) { e.printStackTrace(); } }update语句:
public static void update(){ QueryRunner qr = new QueryRunner(); String sql = "update student set sno=sno+3 where sname = 张三"; Connection conn = null; try { conn = JDBCUtils.getConnection(); int count = qr.update(conn,sql); System.out.println(count); DbUtils.closeQuietly(conn); } catch (SQLException e) { e.printStackTrace(); } }delete语句:
public static void delete(){ QueryRunner qr = new QueryRunner(); String sql = "delete from student where sno = 03"; Connection conn = null; try { conn = JDBCUtils.getConnection(); int count = qr.update(conn,sql); System.out.println(count); DbUtils.closeQuietly(conn); } catch (SQLException e) { e.printStackTrace(); } }查询语句(查询一条):
public static Account get1(String sno) { String sql = "select * from account where sno=111"; Connection conn = DButil.getConnection(); QueryRunner qr = new QueryRunner();//创建queryRunner对象,用来操作数据库 Object params[] = {sno}; try { return qr.query(conn,sql,new BeanHandler<Account>(Account.class),params); } catch (SQLException e) { e.printStackTrace(); } return null;查询语句(查询多条):
public static long getPage1(int page, int rows, List<Account> accounts) { String sql = "select * from account limit ?,?"; Connection conn = DButil.getConnection(); QueryRunner qr = new QueryRunner(); Object [] paras = {(page-1)*rows,rows}; try { //得到一个集合 List<Account> aa = qr.query(conn,sql,new BeanListHandler<Account>(Account.class),paras); accounts.addAll(aa); sql = "select COUNT(*) as num from account"; return qr.query(conn,sql,new ScalarHandler<Long>()); //<long>只能用封装类型 } catch (SQLException e) { e.printStackTrace(); } return -1; }连接类ConnectDb:import java.sql.DriverManager;
[html] view plain copy import java.sql.SQLException; import java.sql.Connection; public class ConnectDb { private static String driveClassName = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://192.168.1.161:3306/test?useUnicode=true&characterEncoding=utf8"; private static String user = "root"; private static String password = "e-playnow"; public static Connection Connect(){ Connection conn = null; //load driver try { Class.forName(driveClassName); } catch (ClassNotFoundException e) { System.out.println("load driver failed!"); e.printStackTrace(); } //connect db try { conn = DriverManager.getConnection(url, user, password); } catch (SQLException e) { System.out.println("connect failed!"); e.printStackTrace(); } return conn; } }数据库表:
[html] view plain copy CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, `age` tinyint(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8Bean:
[html] view plain copy package Beans; public class UserBean { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }2,Demo:
[html] view plain copy import java.sql.Connection; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import Beans.UserBean; public class main { public static void main(String[] args) throws SQLException { insert_test(); del_test(); } static void insert_test() throws SQLException{ Connection conn = ConnectDb.Connect(); //创建SQL执行工具 QueryRunner qRunner = new QueryRunner(); //执行SQL插入 int n = qRunner.update(conn, "insert into user(name,age) values('xxx',22)"); System.out.println("成功插入" + n + "条数据!"); //关闭数据库连接 DbUtils.closeQuietly(conn); } static void select_test() throws SQLException{ Connection conn = ConnectDb.Connect(); //创建SQL执行工具 QueryRunner qRunner = new QueryRunner(); `在这里插入代码片` @SuppressWarnings("unchecked") List<UserBean> list = (List<UserBean>) qRunner.query(conn, "select id,name,age from user", new BeanListHandler(UserBean.class)); //输出查询结果 for (UserBean user : list) { System.out.println(user.getAge()); } //关闭数据库连接 DbUtils.closeQuietly(conn); } static void update_test() throws SQLException{ Connection conn = ConnectDb.Connect(); //创建SQL执行工具 QueryRunner qRunner = new QueryRunner(); //执行SQL插入 int n = qRunner.update(conn, "update user set name = 'xxx',age=28"); System.out.println("成功更新" + n + "条数据!"); //关闭数据库连接 DbUtils.closeQuietly(conn); } static void del_test() throws SQLException{ Connection conn = ConnectDb.Connect(); //创建SQL执行工具 QueryRunner qRunner = new QueryRunner(); //执行SQL插入 int n = qRunner.update(conn, "DELETE from user WHERE name='xxx';"); System.out.println("删除成功" + n + "条数据!"); //关闭数据库连接 DbUtils.closeQuietly(conn); } }代码链接:https://www.cnblogs.com/CQY1183344265/p/5854418.html
