用于查询多行多列的数据
package com.jdbc.DBUtils;
import com.JDBC_Utils.JDBCUtilsByDruid;
import com.JDBC_Utils.News;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class DBUtils_USE {
/**
* 使用 apache-DBUtils 工具类 + druid 完成对表的 crud 操作
* */
/**
* 用于查询多行多列的数据
*/
@Test
public void testSelect_BeanListHandler() {
//1.得到 druid 连接
Connection connection = null;
try {
connection = JDBCUtilsByDruid.getConnection();
//2.使用 DBUtils 类和接口 , 先引入 DBUtils 相关的 jar , 加入到本项目中
//3.创建QueryRunner(QueryRunner类封装了sql的执行,可以实现crud,线程安全)
QueryRunner queryRunner = new QueryRunner();
//4.执行 相关操作 返回ArrayList结果集 (也可以查询部分列)
String sql = "select * from news where id>=?";
//光标放在括号里,ctrl + p 可以查看参数
List<News> list = queryRunner.query(connection, sql, new BeanListHandler<>(News.class), 6);
//(1)query 方法就是执行 sql 语句,得到 resultset ---封装到 --> ArrayList 集合中,
//(2)并返回集合
//(3) connection: 连接
//(4) sql : 执行的 sql 语句
//(5) new BeanListHandler<>(Actor.class): 在将 resultset -> News 对象 -> 封装到 ArrayList
// 底层使用反射机制 去获取 Actor 类的属性,然后进行封装
//(6) 10 就是给 sql 语句中的? 赋值,可以有多个值,因为是可变参数 Object... params
//(7) 底层得到的 resultset ,会在 query 关闭, 且关闭 PreparedStatment
//输出list 查看获取到的结果集
System.out.println(list);
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
JDBCUtilsByDruid.close(null, null, connection);
}
}
}
用于查询单行的数据
/**
* 用于查询单行的数据
* 演示 apache-dbutils + druid 完成 返回的结果是单行记录(单个对象)
*/
@Test
public void testSelect_BeanHandler() {
//1.得到 druid 连接
Connection connection = null;
try {
connection = JDBCUtilsByDruid.getConnection();
//2.使用 DBUtils 类和接口 , 先引入 DBUtils 相关的 jar , 加入到本项目中
//3.创建QueryRunner(QueryRunner类封装了sql的执行,可以实现crud,线程安全)
QueryRunner queryRunner = new QueryRunner();
//4.执行 相关操作 返回结果集
String sql = "select * from news where id=?";
//光标放在括号里,ctrl + p 可以查看参数
// 因为我们返回的单行记录<--->单个对象 , 使用的 Hander 是 BeanHandler
News news = queryRunner.query(connection, sql, new BeanHandler<>(News.class), 10);
System.out.println(news);
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
JDBCUtilsByDruid.close(null, null, connection);
}
}
用于查询单列结果
/**
* 用于查询单列结果
* 演示 apache-dbutils + druid 完成查询结果是单行单列-返回的就是 object
*/
@Test
public void testSelect_ScalarHandler() {
//1.得到 druid 连接
Connection connection = null;
try {
connection = JDBCUtilsByDruid.getConnection();
//2.执行方法 返回单行单列
QueryRunner queryRunner = new QueryRunner();
String sql = "select count(?) from news";
//因为返回的是一个对象, 使用的 handler 就是 ScalarHandler
//返回单行单列 , 返回的就是 Object
Object o = queryRunner.query(connection, sql, new ScalarHandler(), "*");
System.out.println(o);
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
JDBCUtilsByDruid.close(null, null, connection);
}
}
对数据库进行DML操作(插入,更新,删除语句)
/***
* 对数据库进行DML操作(插入,更新,删除语句)
* */
@Test
public void testDML() {
Connection connection = null;
try {
connection = JDBCUtilsByDruid.getConnection();
//删除语句
//String sql = "delete from news where id=?";
//插入语句
//String sql = "insert into news values (?,?,?)";
//更新语句
String sql = "update news set id=? where id=?";
QueryRunner queryRunner = new QueryRunner();
// 执行 dml 操作是 queryRunner.update()
//受影响行数 方法返回一个int数值
//int affectRows = queryRunner.update(connection, sql, 6,"小度","小度小度你在干嘛");
int affectRows = queryRunner.update(connection, sql, 7, 9);
System.out.println(affectRows > 0 ? "操作成功" : "数据库未被影响");
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
JDBCUtilsByDruid.close(null, null, connection);
}
}
标签:queryRunner,QueryRunner,connection,sql,apache,import,DBUtils,null,工具
From: https://www.cnblogs.com/weifengfuxiufa/p/17288091.html