DBUtils如何使用

    科技2024-12-21  13

    1.DBUtils简单介绍

    基本介绍

    文名简介Commons DbUtils操作数据库的组件 特色用途简单实用Java编程

    Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。 (1)对于数据表的读操作,他可以把结果转换成L ist,Array,Set等java集合,便于程序员操作; (2)对于数据表的写操作,也变得很简单(只需写sq|语句); (3)可以使用数据源,使用JNDI,数据库连接池等技术来优化性能-- 重用已经构建好的数据库连接对象。

    注意:在使用DBUtils过程中,需要在C3P0Utils中添加getDateSouorce方法。

    2.DBUtils的三个核心对象

    (1)DBUtils

    连接数据库对象——jdbc辅助方法的集合类,线程安全。

    构造方法:DBUtils()

    作用:控制连接,控制书屋,控制驱动加载额一个类。

    (2)QueryRunner

    SQL语句的操作对象,可以设置查询结果集的封装策略,线程安全。

    构造方法: 1)QueryRunner():创建一个与数据库无关的QueryRunner对象,后期再操作数据库的会后,需要手动给一个Connection对象,它可以手动控制事务。

    Connection.setAutoCommit(false); 设置手动管理事务。 Connection.commit(); 提交事务。

    2)QueryRunner(DataSource ds):创建一个与数据库关联的queryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。

    DataSource:数据库连接池对象。 构造函数与增删改查方法的组合: QueryRunner() update(Connection conn, String sql, Object... params) query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) QueryRunner(DataSource ds) update(String sql, Object... params) query(String sql, ResultSetHandler<T> rsh, Object... params)

    (3)ResultSetHandler

    封装数据的策略对象------将封装结果集中的数据,转换到另一个对象。

    策略:封装数据到对象的方式(示例:将数据库保存在User、保存到数组、保存到集合)方法介绍:handle(ResultSet rs)

    备注:详解参考ResultSetHandle实现类。

    3.Dbutils快速入门

    (1)安装教程

    在链接中下载安装打开该文件。 上图中红框部分的文件就是我们所需要的内容。

    (2)使用步骤

    1.加载JDBC驱动程序类,并用DriverManager来得到一个数据库连接conn。 2.实例化 QueryRunner,得到实例化对象qRunner。 3. qRunner.update()方法,执行增改删的sql命令,qRunner.query()方法,得到结果集。

    使用Dbutils注意事项: (1)需要导入的jar包:①MySql驱动 ②c3p0包 ③DbUtils包 (2)添加c3p0配置文件 (3)可以自行添加一个JDBCUtils工具类:用来获取c3p0连接池对象

    (3)实战演示

    连接类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=utf8

    Bean:

    [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; } }

    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); } }

    链接1:代码:https://www.cnblogs.com/CQY1183344265/p/5854418.html 链接2:DBUtils jar 安装包下载网址:http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi

    4.总结

    DBUtils是比较轻巧地对JDBC进行了封装,在简化JDBC编程的目的下又不会失去JDBC的高效率。其实只是使用的话,只看两个类(DbUtils 和QueryRunner)和一个接口(ResultSethandler)就可以了。

    Processed: 0.287, SQL: 8