📅  最后修改于: 2023-12-03 14:59:20.208000             🧑  作者: Mango
Apache Commons DBUtils是Apache基金会提供的一个流行的开源Java库,用于简化和增强JDBC编程。它提供了一组简单易用、可扩展的JDBC实用程序,帮助开发人员编写数据库访问代码。DBUtils是轻量级的,不依赖于任何第三方框架,可以方便地集成到任何现有项目中。
DBUtils提供了以下便利API:
QueryRunner是DBUtils中最常用的API之一,用于执行SQL查询语句,并将查询结果转换为Java对象或Java对象集合。QueryRunner基于JDBC的PreparedStatement实现,可以安全地防止SQL注入攻击。QueryRunner提供了以下方法:
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
执行SQL查询语句,并将查询结果转换为Java对象。参数conn
指定数据库连接,参数sql
指定SQL查询语句,参数rsh
指定结果集处理器,参数params
指定查询参数。方法返回值为T类型。
try (Connection conn = getDBConnection()) {
QueryRunner qr = new QueryRunner();
List<Customer> customers = qr.query(conn, "SELECT * FROM customers WHERE age > ?", new BeanListHandler<>(Customer.class), 18);
for (Customer customer : customers) {
System.out.println(customer);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object[] params)
执行SQL查询语句,并将查询结果转换为Java对象。参数conn
指定数据库连接,参数sql
指定SQL查询语句,参数rsh
指定结果集处理器,参数params
指定查询参数。方法返回值为T类型。
try (Connection conn = getDBConnection()) {
QueryRunner qr = new QueryRunner();
Customer customer = qr.query(conn, "SELECT * FROM customers WHERE customer_id = ?", new BeanHandler<>(Customer.class), "C001");
System.out.println(customer);
} catch (SQLException ex) {
ex.printStackTrace();
}
query(Connection conn, String sql, ResultSetHandler<T> rsh)
执行SQL查询语句,并将查询结果转换为Java对象集合。参数conn
指定数据库连接,参数sql
指定SQL查询语句,参数rsh
指定结果集处理器。方法返回值为T类型。
try (Connection conn = getDBConnection()) {
QueryRunner qr = new QueryRunner();
List<Customer> customers = qr.query(conn, "SELECT * FROM customers", new BeanListHandler<>(Customer.class));
for (Customer customer : customers) {
System.out.println(customer);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
update(Connection conn, String sql, Object... params)
执行SQL更新语句,返回受影响的行数。参数conn
指定数据库连接,参数sql
指定SQL更新语句,参数params
指定更新参数。
try (Connection conn = getDBConnection()) {
QueryRunner qr = new QueryRunner();
int n = qr.update(conn, "UPDATE customers SET age = ? WHERE customer_id = ?", 20, "C001");
System.out.printf("Updated %d rows.%n", n);
} catch (SQLException ex) {
ex.printStackTrace();
}
ResultSetHandler是DBUtils中用于将JDBC结果集转换为Java对象或Java对象集合的API,用于简化访问JDBC结果集的过程。ResultSetHandler提供了以下实现类:
例如,以下代码将使用BeanListHandler将查询结果转换为Java对象集合:
try (Connection conn = getDBConnection()) {
QueryRunner qr = new QueryRunner();
List<Customer> customers = qr.query(conn, "SELECT * FROM customers", new BeanListHandler<>(Customer.class));
for (Customer customer : customers) {
System.out.println(customer);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
BasicDataSource是DBUtils中提供的一个简单实用的数据源类,实现了数据库连接池机制和常见的数据库连接属性配置。使用BasicDataSource可以方便地获取数据库连接,具有以下优点:
以下是使用BasicDataSource获取数据库连接并执行SQL查询的示例代码:
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost/mydatabase");
ds.setUsername("myuser");
ds.setPassword("mypassword");
ds.setMaxTotal(100);
ds.setMinIdle(10);
ds.setMaxWaitMillis(10000);
ds.setValidationQuery("SELECT 1");
try (Connection conn = ds.getConnection()) {
QueryRunner qr = new QueryRunner();
List<Customer> customers = qr.query(conn, "SELECT * FROM customers", new BeanListHandler<>(Customer.class));
for (Customer customer : customers) {
System.out.println(customer);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
总之,Apache Commons DBUtils提供了一组简单易用、可扩展的JDBC实用程序,方便开发人员编写数据库访问代码,并提高应用程序的性能和稳定性。