Dbutils使用

    科技2025-05-15  6

    Dbutils使用

    一、DbUtils简介二、DbUtils核心类或接口三、使用步骤四、实现代码JdbcDemoDbUtils.javaJdbcUtils.javaUsers.javajdbc.properties数据库表结构

    一、DbUtils简介

    commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,创建连接、结果集封装、释放资源,同时也不会影响程序的性能。创建连接、结果集封装、释放资源因此dbutils成为很多不喜欢hibernate的公司的首选。

    二、DbUtils核心类或接口

    QueryRunner:类名 作用:操作sql语句 构造器:new QueryRunner(Datasource ds); 常用方法: query(…);update(…); DbUtils:释放资源,控制事务 closeQuietly(conn):内部处理了异常的释放资源commitAndClose(Connection conn):提交事务并释放连接 … ResultSetHandler:封装结果集 (接口)查询的时候要用到结果集,ResultSetHandler接口就是将ResultSet结果集映射为Bean、List、Map等Java中的对象或者集合。 1.处理单行数据的类:ScalarHandler、ArrayHandler、MapHandler、BeanHandler 2. 处理多行数据的类:BeanListHandler、AbstractListHandler(ArrayListHandler、MapListHandler、ColumnListHandler)、AbstractKeyedHandler(KeyedHandler BeanMapHandler) 3.可扩展的类:BaseResultSetHandler

    三、使用步骤

    1.导入jar包(commons-dbutils-1.4.jar 2.创建一个 queryrunner类:操作sql

    方法:new QueryRunner(Datasource ds)

    3.编写sql 4.执行sql

    query(…):执行操作update(…):执行cud操作

    四、实现代码

    JdbcDemoDbUtils.java

    package jdbc; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import java.sql.Connection; import java.sql.DriverManager; import java.util.List; public class JdbcDemoDbUtils { public static void main(String[] args) throws Exception { QueryRunner qr = new QueryRunner(); //Connection cn = JdbcUtils.getConnection(); Class.forName("com.mysql.jdbc.Driver"); Connection cn = DriverManager.getConnection("jdbc:mysql:///dbuser", "root", "root"); //增 String sql0 = "insert into users(username, password) values(?, ?)"; qr.update(cn, sql0, new Object[]{"lisi", "4444"}); //修改 String sql = "update users set password = ? where username = ? "; qr.update(cn, sql, new Object[]{"0000", "lisi"}); //删除 String sql1 = "delete from users where username = ?"; qr.update(cn, sql1, new Object[]{"lisi"}); //单行查询得到的结果集转换成对象 String sql2 = "select count(id) from users "; Object obj = qr.query(cn, sql2, new ScalarHandler()); System.out.println("用户数:" + obj); // BeanListHandler用于处理多行结果集,把多个结果分别封装成对象,并且添加到一个集合中 String sql3 = "select * from users"; List<Users> lists = qr.query(cn, sql3, new BeanListHandler<>(Users.class)); for (Users us : lists) { System.out.println(us); } DbUtils.closeQuietly(cn); } }

    JdbcUtils.java

    package jdbcutils; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.*; import java.util.Properties; /* 工具类jdbcUtils */ public class JdbcUtils { private static String url; private static String user; private static String password; private static String driver; static { //读取资源文件,获取值。 try { //1. 创建Properties集合类。 Properties pro = new Properties(); //获取src路径下的文件的方式--->ClassLoader 类加载器 ClassLoader classLoader = JdbcUtils.class.getClassLoader(); URL res = classLoader.getResource("jdbc.properties"); String path = res.getPath(); //2. 加载文件 pro.load(new FileReader(path)); //3. 获取数据,赋值 url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); driver = pro.getProperty("driver"); //4. 注册驱动 Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } //获取驱动 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } //关闭资源 public static void close(Connection conn, Statement stat) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } } //关闭资源 public static void close(Connection conn, Statement stat, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

    Users.java

    package jdbc; public class Users { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "Users{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }

    jdbc.properties

    driver = com.mysql.jdbc.Driver url = jdbc:mysql:///dbuser user = root password = root

    数据库表结构

    CREATE TABLE users( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(32), PASSWORD VARCHAR(32) )
    Processed: 0.010, SQL: 8