暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Tutorialspoint DBUtils 教程

原创 yBmZlQzJ 2023-02-21
265

Tutorialspoint DBUtils 教程

来源:易百教程

DBUtils教程™

Apache Commons DbUtils库是一个相当小的一组类,它是设计用来在没有资源泄漏的情况下简化JDBC调用处理,并且具有更简洁的代码。 本教程涵盖了Apache Commons DBUtils的基本理解所需的大部分主题,并了解其工作原理。

读者

本教程已经为初学者准备,帮助他们了解Apache Commons DBUtils相关的基本到高级概念。

前提条件

在开始练习此参考文献中提供的各种示例之前,我们假设您已经了解计算机程序和计算机编程语言(尤其是Java语言)。

问题反馈

我们不能保证您在学习此 DBUtils 教程的过程中不会遇到任何问题。本教程中的讲解,示例和代码等只是根据作者的理解来概括写出。由于作者水平和能力有限,因此不保正所有编写的文章都准确无误。但是如果有遇到任何错误或问题,请反馈给我们,我们会及时纠正以方便后续读者阅读。


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils简介 - DBUtils教程™

Apache Commons DbUtils库是一个相当小的一组类,它们被设计用来在没有资源泄漏的情况下简化JDBC调用处理,并且具有更简洁的代码。 由于JDBC资源清理非常繁琐且容易出错,因此DBUtils类有助于抽取出锅炉代码,以便开发人员只能专注于与数据库相关的操作。

使用DBUtils的优点

  • 无资源泄漏 - DBUtils类确保不会发生资源泄漏。
  • 清理和清除代码 - DBUtils类提供干净清晰的代码来执行数据库操作,而无需编写任何清理或资源泄漏防护代码。
  • Bean映射 - DBUtils类支持从结果集中自动填充javabeans。

DBUtils设计原则

  • 小 - DBUtils库的体积很小,只有较少的类,因此易于理解和使用。
  • 透明 - DBUtils库在后台没有做太多工作。 它只需查询并执行。
  • 快速 - DBUtils库类不会创建许多背景对象,并且在数据库操作执行中速度非常快。


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils环境设置 - DBUtils教程™

要开始使用DBUtils进行开发,应该按照以下步骤设置DBUtils环境。 我们假设您正在开发Windows平台。

  1. 安装Java开发环境
  2. 安装MySQL或其它数据库
  3. 下载相关数据库驱动程序

安装数据库驱动

最新的JDK包含一个JDBC-ODBC Bridge驱动程序,它使大多数开放式数据库连接(ODBC)驱动程序可供使用JDBC API的程序员使用。

现在,大多数数据库供应商都在提供适当的JDBC驱动程序以及数据库安装。 所以,不应该担心这部分。

设置数据库凭据

对于本教程,我们将使用MySQL数据库。 当您安装上述任何数据库时,其管理员标识设置为root,并提供设置以设置您选择的密码。

使用根ID和密码可以创建另一个用户ID和密码,也可以使用根ID和密码作为JDBC应用程序。

有各种数据库操作,如数据库创建和删除,这将需要管理员ID和密码。

对于JDBC教程的其余部分,我们将使用带有用户名作为ID和密码的MySQL数据库作为密码。

如果您没有足够的权限来创建新用户,则可以要求数据库管理员(DBA)为您创建用户标识和密码。

创建数据库

要创建emp数据库,请参考以下步骤 -

步骤1
打开一个命令提示符并切换到安装目录,如下所示 -

C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>

注意: mysqld.exe的路径可能因系统上MySQL的安装位置而异。 可查阅有关如何启动和停止数据库服务器的文档。

第2步

如果它尚未运行,则通过执行以下命令来启动数据库服务器。

C:\Program Files\MySQL\bin>mysqld
C:\Program Files\MySQL\bin>

第3步

通过执行以下命令来创建emp数据库 -

C:\Program Files\MySQL\bin> mysqladmin create emp -u root -p
Enter password: ********
C:\Program Files\MySQL\bin>

创建表

要在emp数据库中创建Employees表,请使用以下步骤 -

步骤1

打开一个命令提示符并切换到安装目录,如下所示 -

C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>

第2步
按如下所示登录数据库 -

C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>

第3步

如下创建一个表:Employee:

mysql> use emp;
mysql> create table Employees
-> (
-> id int not null,
-> age int not null,
-> first varchar (255),
-> last varchar (255)
-> );
Query OK, 0 rows affected (0.08 sec)
mysql>

创建数据记录

最后,在Employee表中创建如下记录 -

mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal');
Query OK, 1 row affected (0.00 sec)

mysql>

要全面了解MySQL数据库,请学习MySQL教程

下载Commons DBUtils存档

commons-dbutils-1.7-bin.zip,MySql连接器mysql-connector-java-5.1.28-bin.jar,Apache Commons DBCP commons-dbcp2-2.1.1-bin下载最新版本的Apache Common DBUtils jar文件。 Apache Commons Pool commons-pool2-2.4.3-bin.zip和Apache Commons Logging commons-logging-1.2-bin.zip。 在编写本教程时,下载的是:commons-dbutils-1.7-bin.zip,mysql-connector-java-5.1.28-bin.jar,commons-dbcp2-2.1.1-bin.zip,commons-pool2 -2.4.3-bin.zip,commons-logging-1.2-bin.zip并将其复制到D:\>dbutils文件夹中。


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils入门应用程序 - DBUtils教程™

本章提供了一个如何使用DBUtils库创建简单JDBC应用程序的示例。 这将向您展示如何打开数据库连接,执行SQL查询并显示结果。

本模板示例中提到的所有步骤将在本教程的后续章节中进行解释。

创建JDBC应用程序

构建JDBC应用程序涉及以下六个步骤 -

  • 导入包 - 需要包含包含数据库编程所需的JDBC类的包。大多数情况下,使用import java.sql.*就足够了。
  • 注册JDBC驱动程序 - 需要初始化驱动程序,以便可以打开与数据库的通信通道。
  • 打开连接 - 需要使用DriverManager.getConnection()方法创建一个Connection对象,该对象表示与数据库的物理连接。
  • 执行查询 - 需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
  • 从结果集中提取数据 - 要求您使用适当的ResultSet.getXXX()方法从结果集中检索数据。
  • 清理环境 - 需要显式关闭所有数据库资源而不依赖于JVM的垃圾收集。

示例代码

当您需要在将来创建自己的JDBC应用程序时,此示例示例可以作为模板。

此示例代码是基于前一章中完成的环境和数据库设置编写的。

将以下示例复制并粘贴到MainApp.java中,按如下所示进行编译和运行 -

文件:MainApp.java -

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);

//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);

//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);

try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?",
resultHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}

文件:Employee.java -

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

现在编译上面的例子,如下所示 -

C:\>javac MainApp.java Employee.java
C:\>

当运行MainApp时,它会产生以下结果 -

C:\>java MainApp
Connecting to database...
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

基本CRUD示例

DBUtils创建查询 - DBUtils教程™

以下示例将演示如何在DBUtils的帮助下,使用Insert语句来创建记录。 我们将在Employees表中插入一条记录。

语法

String insertQuery ="INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)";
int insertedRecords = queryRunner.update(conn, insertQuery,104,30, "Sohan","Kumar");

其中,

  • insertQuery − Insert query having placeholders.
  • queryRunner − QueryRunner object to insert employee object in database.

为了理解上述与DBUtils相关的概念,我们编写一个将运行插入查询的示例。如下创建一个示例应用程序。

  • 更新在DBUtils入门应用中创建的文件MainApp.java。
  • 编译并运行应用程序,如下所述。

以下是Employee.java文件的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int insertedRecords = queryRunner.update(conn,
"INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)",
104,30, "Sohan","Kumar");
System.out.println(insertedRecords + " record(s) inserted");
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

1 record(s) inserted.


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils读取查询 - DBUtils教程™

以下示例将演示如何在DBUtils的帮助下,使用读取查询来读取数据库表中的记录。这里演示从员工表中读取一条记录。

语法

ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

其中,

  • resultHandler − ResultSetHandler对象将结果集映射到Employee对象。
  • queryRunner − QueryRunner对象在数据库中插入Employee对象。

为了理解上述与DBUtils相关的概念,我们编写一个将运行读取查询的示例。创建一个示例应用程序。

  • 更新在DBUtils入门应用中创建的文件MainApp.java。
  • 编译并运行应用程序,如下所述。

以下是Employee.java文件的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);

//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);

//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler =
new BeanHandler<Employee>(Employee.class);

try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
resultHandler, 104);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

ID: 104, Age: 30, First: Sohan, Last: Kumar


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils更新查询 - DBUtils教程™

以下示例将演示如何使用Update查询,在DBUtils的帮助下更新记录。 我们将更新Employees表中的记录。

语法

String updateQuery = "UPDATE employees SET age=? WHERE id=?";
int updatedRecords = queryRunner.update(conn, updateQuery, 33,104);

其中,

  • updateQuery − 更新包含占位符的查询。
  • queryRunner − QueryRunner对象更新数据库中的员工对象。

为了理解上述与DBUtils相关的概念,我们编写一个将运行更新查询的示例。创建一个示例应用程序。

  • 更新在DBUtils入门应用中创建的文件MainApp.java。
  • 编译并运行应用程序,如下所述。

以下是Employee.java文件的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int updatedRecords = queryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,104);
System.out.println(updatedRecords + " record(s) updated.");
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

1 record(s) updated.


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils删除查询 - DBUtils教程™

以下示例将演示如何使用Delte查询,在DBUtils的帮助下删除记录。 我们将删除Employees表中的一条记录。

语法

String deleteQuery = "DELETE FROM employees WHERE id=?";
int deletedRecords = queryRunner.delete(conn, deleteQuery, 33,104);

其中,

  • deleteQuery − 删除包含占位符的查询。
  • queryRunner − QueryRunner对象删除数据库中的员工对象。

为了理解上述与DBUtils相关的概念,我们编写一个将运行更新查询的示例。创建一个示例应用程序。

  • 更新在DBUtils入门应用中创建的文件MainApp.java。
  • 编译并运行应用程序,如下所述。

以下是Employee.java文件的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int deletedRecords = queryRunner.update(conn,
"DELETE from employees WHERE id=?", 104);
System.out.println(deletedRecords + " record(s) deleted.");
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

1 record(s) deleted.


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils示例

DBUtils QueryRunner接口 - DBUtils教程™

org.apache.commons.dbutils.QueryRunner类是DBUtils库中的中心类。 它执行带有可插入策略的SQL查询来处理ResultSets。 这个类是线程安全的。

类声明

以下是org.apache.commons.dbutils.QueryRunner类的声明 -

public class QueryRunner
extends AbstractQueryRunner

用法

第1步 - 创建一个连接对象。
第2步 - 使用QueryRunner对象方法进行数据库操作。

示例

以下示例将演示如何使用QueryRunner类读取记录。 这里将读取employee表中的其中一条记录。

语法

ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp =
queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

其中

  • resultHandler - ResultSetHandler对象将结果集映射到Employee对象。
  • queryRunner - 用于从数据库读取员工对象的QueryRunner对象。

要理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。创建一个示例应用程序。

更新在DBUtils入门程序中创建的文件:MainApp.java 。
编译并运行应用程序,如下所述。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);

//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);

//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);

try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
resultHandler, 103);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,让我们运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

ID: 103, Age: 28, First: Sumit, Last: Mittal


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils AsyncQueryRunner接口 - DBUtils教程™

org.apache.commons.dbutils.AsyncQueryRunner类有助于执行具有异步支持的长时间运行的SQL查询。 这个类是线程安全的。 该类支持与QueryRunner相同的方法,但它返回Callable对象,在之后可以使用它来检索结果。

类声明

以下是org.apache.commons.dbutils.AsyncQueryRunner类的声明 -

public class AsyncQueryRunner
extends AbstractQueryRunner

用法

第1步 - 创建一个连接对象。
第2步 - 使用AsyncQueryRunner对象方法进行数据库操作。

示例

以下示例将演示如何使用AsyncQueryRunner类更新记录。 我们将更新employee表中的可用记录。

语法

String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);

其中

  • updateQuery - 更新含有占位符的查询。
  • asyncQueryRunner - 用于更新数据库中的员工对象的asyncQueryRunner对象。
  • future - 未来的对象以后检索结果。

为了理解上述与DBUtils相关的概念,让我们编写一个将以异步模式运行更新查询的示例。 创建一个示例应用程序。

更新在DBUtils入门程序中创建的文件:MainApp.java 。
编译并运行应用程序,如下所述。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.AsyncQueryRunner;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws
SQLException, InterruptedException,
ExecutionException, TimeoutException {
Connection conn = null;

AsyncQueryRunner asyncQueryRunner = new AsyncQueryRunner( Executors.newCachedThreadPool());

DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
Future<Integer> future = null;
try {

future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);

Integer updatedRecords = future.get(10, TimeUnit.SECONDS);
System.out.println(updatedRecords + " record(s) updated.");
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,让我们运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

1 record(s) updated.


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils ResultSetHandler接口 - DBUtils教程™

org.apache.commons.dbutils.ResultSetHandler接口负责将ResultSets转换为对象。

类声明

以下是org.apache.commons.dbutils.ResultSetHandler类的声明 -

public interface ResultSetHandler<T>

用法

第1步 - 创建一个连接对象。
第2步 - 创建ResultSetHandler的实现。
第3步 - 将resultSetHandler传递给QueryRunner对象,并进行数据库操作。

示例

以下示例将演示如何使用ResultSetHandler类读取记录。 我们将读取一条employee表中的记录。

语法

Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

其中

  • resultHandler - ResultSetHandler对象将结果集映射到Employee对象。
  • queryRunner - QueryRunner对象从数据库中读取employee对象。

为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。 创建一个示例应用程序。

更新在DBUtils入门程序中创建的文件:MainApp.java 。
编译并运行应用程序,如下所述。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Arrays;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);

//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);

//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Object[]> handler = new ResultSetHandler<Object[]>() {
public Object[] handle(ResultSet rs) throws SQLException {
if (!rs.next()) {
return null;
}
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
Object[] result = new Object[cols];

for (int i = 0; i < cols; i++) {
result[i] = rs.getObject(i + 1);
}
return result;
}
};

try {
Object[] result = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
handler, 103);
//Display values
System.out.print("Result: " + Arrays.toString(result));
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,让我们运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

Connecting to database...
Result: [103, 33, Sumit, Mittal]


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils BeanHandler类 - DBUtils教程™

org.apache.commons.dbutils.BeanHandler是ResultSetHandler接口的实现,负责将第一个ResultSet行转换为JavaBean。 这个类是线程安全的。

类声明

以下是org.apache.commons.dbutils.BeanHandler类的声明 -

public class BeanHandler<T>
extends Object implements ResultSetHandler<T>

用法

第1步 - 创建一个连接对象。
第2步 - 获取ResultSetHandler作为BeanHandler对象的实现。
第3步 - 将resultSetHandler传递给QueryRunner对象,并进行数据库操作。

示例

以下示例将演示如何使用BeanHandler类读取记录。 我们将读取Employees表中的一条记录,并将其映射到Employee bean。

语法

Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

其中

  • resultHandler - ResultSetHandler对象将结果集映射到Employee对象。
  • queryRunner - QueryRunner对象从数据库中读取Employee对象。

为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。 创建一个示例应用程序。

更新在DBUtils入门程序中创建的文件:MainApp.java 。
编译并运行应用程序,如下所述。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);

//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);

//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler
= new BeanHandler<Employee>(Employee.class);

try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?",
resultHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,让我们运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

ID: 103, Age: 28, First: Sumit, Last: Mittal


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils BeanListHandler类 - DBUtils教程™

org.apache.commons.dbutils.BeanListHandler是ResultSetHandler接口的实现,负责将ResultSet行转换为Java Bean列表。 这个类是线程安全的。

类声明

以下是org.apache.commons.dbutils.BeanListHandler类的声明 -

public class BeanListHandler<T>
extends Object implements ResultSetHandler<List<T>>

用法

第1步 - 创建一个连接对象。
第2步 - 将ResultSetHandler实现为BeanListHandler对象。
第3步 - 将resultSetHandler传递给QueryRunner对象,并进行数据库操作。

示例

以下示例将演示如何使用BeanListHandler类读取记录。 我们将读取Employees表中的一条记录,并将其映射到Employee bean。

语法

List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);

其中

  • resultHandler - ResultSetHandler对象将结果集映射到Employee对象。
  • queryRunner - QueryRunner对象从数据库中读取Employee对象。

为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。 创建一个示例应用程序。

更新在DBUtils入门程序中创建的文件:MainApp.java 。
编译并运行应用程序,如下所述。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
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.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);

//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);

//Step 3: Create a ResultSet Handler to handle List of Employee Beans
ResultSetHandler<List<Employee>> resultHandler = new BeanListHandler<Employee>(Employee.class);

try {
List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
for(Employee emp: empList ) {

//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
}
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,让我们运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils ArrayListHandler类 - DBUtils教程™

org.apache.commons.dbutils.ArrayListHandler是ResultSetHandler接口的实现,负责将ResultSet行转换为object[]。 这个类是线程安全的。

类声明

以下是org.apache.commons.dbutils.ArrayListHandler类的声明 -

public class ArrayListHandler
extends AbstractListHandler<Object[]>

用法

第1步 - 创建一个连接对象。
第2步 - 将ResultSetHandler实现为BeanListHandler对象。
第3步 - 将resultSetHandler传递给QueryRunner对象,并进行数据库操作。

示例

以下示例将演示如何使用ArrayListHandler类读取记录。 我们将读取Employees表中的一条记录,并将其映射到Employee bean。

语法

List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);

其中

  • resultHandler - ResultSetHandler对象将结果集映射到Employee对象。
  • queryRunner - QueryRunner对象从数据库中读取Employee对象。

为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。 创建一个示例应用程序。

更新在DBUtils入门程序中创建的文件:MainApp.java 。
编译并运行应用程序,如下所述。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);

//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);

try {
List<Object[]> result = queryRunner.query(conn, "SELECT * FROM employees"
, new ArrayListHandler());
for(Object[] objects : result) {
System.out.println(Arrays.toString(objects));
}
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,让我们运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

[100, 18, Zara, Ali]
[101, 25, Mahnaz, Fatma]
[102, 30, Zaid, Khan]
[103, 28, Sumit, Mittal]


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils MapListHandler类 - DBUtils教程™

org.apache.commons.dbutils.MapListHandler是ResultSetHandler接口的实现,负责将ResultSet行转换为Maps列表。 这个类是线程安全的。

类声明

以下是org.apache.commons.dbutils.MapListHandler类的声明 -

public class MapListHandler
extends AbstractListHandler<Map<String,Object>>

用法

第1步 - 创建一个连接对象。
第2步 - 将ResultSetHandler实现为MapListHandler对象。
第3步 - 将resultSetHandler传递给QueryRunner对象,并进行数据库操作。

示例

以下示例将演示如何使用ArrayListHandler类读取记录。 我们将读取Employees表中的一条记录,并将其映射到Employee bean。

语法

List<Map<String, Object>> result = queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());

其中

  • resultHandler - MapListHandler对象将结果集映射到Map列表。
  • queryRunner - QueryRunner对象从数据库中读取Employee对象。

为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。 创建一个示例应用程序。

更新在DBUtils入门程序中创建的文件:MainApp.java 。
编译并运行应用程序,如下所述。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();

//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);

//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);

try {
List<Map<String, Object>> result
= queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());
System.out.println(result);
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,让我们运行该应用程序。 如果应用程序一切正常,它将打印下面的消息。

Connecting to database...
[{id=100, age=18, first=Zara, last=Ali},
{id=101, age=25, first=Mahnaz, last=Fatma},
{id=102, age=30, first=Zaid, last=Khan},
{id=103, age=33, first=Sumit, last=Mittal}]


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

高级DBUtils示例

DBUtils自定义处理程序 - DBUtils教程™

可以通过实现ResultSetHandler接口或扩展任何现有的ResultSetHandler实现来创建自己的自定义处理程序。 在下面的示例中,我们通过扩展BeanHandler类创建了自定义处理程序EmployeeHandler。

为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。 创建一个示例应用程序。

  1. 更新在DBUtils入门程序中创建的文件:MainApp.java。
  2. 按照下面的说明编译并运行应用程序。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

以下是EmployeeHandler.java文件的内容。

import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbutils.handlers.BeanHandler;

public class EmployeeHandler extends BeanHandler<Employee> {

public EmployeeHandler() {
super(Employee.class);
}

@Override
public Employee handle(ResultSet rs) throws SQLException {
Employee employee = super.handle(rs);
employee.setName(employee.getFirst() +", " + employee.getLast());
return employee;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
EmployeeHandler employeeHandler = new EmployeeHandler();

try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?",
employeeHandler, "Sumit");

//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", Name: " + emp.getName());
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,运行该应用程序。 如果你的应用程序一切正常,它将打印下面的消息。

ID: 103, Age: 28, Name: Sumit, Mittal


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils自定义行处理器 - DBUtils教程™

如果数据库表中的列名和等价的javabean对象名称不相似,那么我们可以通过使用自定义的BasicRowProcessor对象来映射它们。 看下面的例子。

为了理解上述与DBUtils相关的概念,让我们编写一个将运行读取查询的示例。创建一个示例应用程序。

  1. 更新在DBUtils入门程序中创建的文件:MainApp.java。
  2. 按照下面的说明编译并运行应用程序。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

以下是EmployeeHandler.java文件的内容。

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.BasicRowProcessor;

public class EmployeeHandler extends BeanHandler<Employee> {

public EmployeeHandler() {
super(Employee.class, new BasicRowProcessor(new BeanProcessor(mapColumnsToFields())));
}

@Override
public Employee handle(ResultSet rs) throws SQLException {
Employee employee = super.handle(rs);
employee.setName(employee.getFirst() +", " + employee.getLast());
return employee;
}

public static Map<String, String> mapColumnsToFields() {
Map<String, String> columnsToFieldsMap = new HashMap<>();
columnsToFieldsMap.put("ID", "id");
columnsToFieldsMap.put("AGE", "age");
return columnsToFieldsMap;
}
}

以下是MainApp.java文件的内容。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";

public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
EmployeeHandler employeeHandler = new EmployeeHandler();

try {
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?",
employeeHandler, "Sumit");

//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", Name: " + emp.getName());
} finally {
DbUtils.close(conn);
}
}
}

完成创建源文件后,运行该应用程序。 如果你的应用程序一切正常,它将打印下面的消息。

ID: 103, Age: 28, Name: Sumit, Mittal


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

DBUtils使用DataSource - DBUtils教程™

到目前为止,我们在使用QueryRunner时都是使用Connection对象。 也可以使用数据源。 以下示例将演示如何在QueryRunner和数据源的帮助下使用查询读取记录。 这里将从Employee表中读取一条记录。

语法

QueryRunner queryRunner = new QueryRunner( dataSource );
Employee emp = queryRunner.query("SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");

其中,

  • dataSource - 配置了DataSource对象。
  • resultHandler - ResultSetHandler对象将结果集映射到Employee对象。
  • queryRunner - 用于从数据库读取Employee对象的QueryRunner对象。
  1. 更新在DBUtils入门程序中创建的文件:MainApp.java。
  2. 按照下面的说明编译并运行应用程序。

以下是Employee.java的内容。

public class Employee {
private int id;
private int age;
private String first;
private String last;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

以下是CustomDatasource.java文件的内容。

import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;

public class CustomDataSource {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";

// Database credentials
static final String USER = "root";
static final String PASS = "admin";
private static DataSource datasource;
private static final BasicDataSource basicDataSource;

static {
basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName(JDBC_DRIVER);
basicDataSource.setUsername(USER);
basicDataSource.setPassword(PASS);
basicDataSource.setUrl(DB_URL);
}

public static DataSource getInstance() {
return basicDataSource;
}
}

以下是MainApp.java文件的内容。

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;

public class MainApp {
public static void main(String[] args) throws SQLException {

DbUtils.loadDriver(JDBC_DRIVER);
QueryRunner run = new QueryRunner(CustomDataSource.getInstance());
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);

Employee emp = queryRunner.query("SELECT * FROM employees WHERE id=?",
resultHandler, 103);

//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
}
}

完成创建源文件后,运行该应用程序。 如果你的应用程序一切正常,它将打印下面的消息。

ID: 103, Age: 33, First: Sumit, Last: Mittal


易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论