简介

Apache DbUtils 是一个开源 Java 库,它提供了一组易于使用的 JDBC 工具,可以简化数据库操作的编码过程。

在本文中,我们将探讨如何使用 Apache DbUtils 进行常见的数据库操作,例如查询、添加和删除数据,以及如何使用带参数返回数据和模糊 like 查询

Maven依赖

您需要在项目中添加以下 Maven 依赖,以获得 Apache DbUtils:

<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>

数据库查询

要使用 Apache DbUtils 进行数据库查询,我们需要创建一个 QueryRunner 实例。以下是创建该实例的示例代码:

QueryRunner runner=new QueryRunner();

接下来,我们可以使用 runner.query() 方法执行 SQL 查询,并将结果集转换为所需的类型。以下是一些示例代码,演示如何使用 ColumnListHandlerBeanListHandler 将查询结果集转换为列表

查询指定列 region为列名

如果您想要查询一列数据,您可以使用 ColumnListHandler 返回一个 List 对象,其中包含所选列的所有值。以下是一个示例代码片段,演示如何使用 ColumnListHandler 获取表中某个列的所有值:

List<String> lis=runner.query(conn, se,new ColumnListHandler<String>("region"));

示例

@Override
public List sere() throws SQLException {
// TODO Auto-generated method stub
String se="select distinct region from bbc";
Connection conn=DBUtil.openconn();
//查询指定列
List<String> lis=runner.query(conn, se,new ColumnListHandler<String>("region"));
return lis;
}

查询总条数

要查询数据表中的总行数,我们只需执行一个特殊的 SQL 查询,然后使用 ScalarHandler 将结果集转换为 long 类型。以下是一个示例代码片段,演示如何使用 ScalarHandler 获取某个数据表的行数:

long lo=runner.query(conn,seco,new ScalarHandler<Long>());

示例

@Override
public int secon() throws SQLException {
// TODO Auto-generated method stub
String seco="select count(*) from easybuy_comment";
Connection conn=JDBCTool.openconn();
long lo=runner.query(conn,seco,new ScalarHandler<Long>());
conn.close();
return (int)lo;
}

更新数据

使用 update() 方法将该语句发送到数据库。以下是一个示例代码片段,演示如何添加新数据到 MySQL 数据库

int seu= runner.update(conn, up, obj);

示例

@Override
public int upenq(Comment con) throws SQLException {
// TODO Auto-generated method stub
String up="update easybuy_comment set EC_CONTENT=?,EC_CREATE_TIME=?,EC_REPLY=?,EC_REPLY_TIME=?,EC_NICK_NAME=? where EC_ID=?";
Connection conn=JDBCTool.openconn();
Object obj[]=new Object[6];
obj[0]=con.getEC_CONTENT();
obj[1]=con.getEC_CREATE_TIME();
obj[2]=con.getEC_REPLY();
obj[3]=con.getEC_REPLY_TIME();
obj[4]=con.getEC_NICK_NAME();
obj[5]=con.getEC_ID();
int seu= runner.update(conn, up, obj);
conn.close();
return seu;
}

删除数据

要从数据库中删除现有数据,我们需要执行一个 DELETE 语句,然后使用 update() 方法将其发送到数据库。以下是一个示例代码片段,演示如何删除 MySQL 数据库中的一行:

int deenq=runner.update(conn, de, id);

示例

@Override
public int deenq(int id) throws SQLException {
// TODO Auto-generated method stub
String de="delete from easybuy_comment where EC_ID=?";
Connection conn=JDBCTool.openconn();
int deenq=runner.update(conn, de, id);
conn.close();
return deenq;
}

带参数返回数据

如果您想要返回根据参数过滤的数据,请使用带参数的查询。以下是一个示例代码片段,演示了如何使用带参数的查询获取某个数据表中满足特定条件的数据:

List list=runner.query(conn, orcif, new BeanListHandler<Order>(Order.class),id);

示例

@Override
public List orconfig(int id) throws SQLException {
// TODO Auto-generated method stub
String orcif="select * from easybuy_order where EO_ID=?";
Connection conn=JDBCTool.openconn();
List list=runner.query(conn, orcif, new BeanListHandler<Order>(Order.class),id);
conn.close();
return list;
}

在这个例子中,我们使用 ? 占位符来防止 SQL 注入攻击,并将查询参数作为 Object[] 传递给 query() 方法。

模糊like查询 返回list

如果您需要执行模糊查询,例如根据关键字搜索文本字段,则可以使用 LIKE 运算符。以下是一个示例代码片段,演示如何使用带参数的 LIKE 查询获取某个数据表中包含指定关键字的行:

List list=runner.query(conn, orcif, new BeanListHandler<Order>(Order.class),id);

示例

@Override
public List sornam(int page,String name) throws SQLException {
// TODO Auto-generated method stub
int n=(page-1)*5;
String sna="select * from easybuy_order where EO_USER_NAME like ? limit ?,5";
String ona="%"+name+"%";
Connection conn=JDBCTool.openconn();
List list=runner.query(conn, sna, new BeanListHandler<Order>(Order.class),ona,n);
conn.close();
return list;
}

在这个例子中,我们使用 % 通配符匹配任意字符,并将 LIKE 查询参数作为 Object[] 传递给 query() 方法。

不带参数返回list

list = runn.query(conn, sql, new BeanListHandler<ProductCategory>(ProductCategory.class));

示例

@Override
public List query() {
// TODO Auto-generated method stub
Connection conn = JDBCTool.openconn();
String sql = "select * from easybuy_product_category;";
List list = null;
try {
list = runn.query(conn, sql, new BeanListHandler<ProductCategory>(ProductCategory.class));
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}

登入

@Override
public User login(String name, String pass) throws SQLException {
// TODO Auto-generated method stub
String selo="select * from easybuy_user where EU_USER_Account=? and EU_PASSWORD=?";
Connection conn=JDBCTool.openconn();
User us=runner.query(conn, selo, new BeanHandler<User>(User.class),name,pass);
conn.close();
return us;
}