/*
基于德鲁伊数据库连接池的工具类
*/
public class JDBCUtilsByDruid {
private static DataSource ds;
//在静态代码块完成 ds 初始化
static {
Properties properties = new Properties();
try {
properties.load(new FileInputStream("src\\druid.properties"));
ds = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//编写getConnection方法
public static Connection getConnection() throws Exception{
return ds.getConnection();
}
//关闭连接
public static void closeConnection(ResultSet resultSet, Statement statement,Connection connection){
//判断是否为null
try {
if(resultSet != null){
resultSet.close();
}
if (statement != null){
statement.close();
}
if (connection != null){
connection.close();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
==========以下是是练习========
//使用 apache-DBUtils 工具类 + druid 完成对标的crud操作
@Test
public void testQueryMany()throws Exception{ //返回结果是多行的清空
//1. 得到连接
Connection connection = JDBCUtilsByDruid.getConnection();
//2. 使用DBUtils 类和接口,先引入DBUtils 的jar文件, 加入到本Project
//3. 创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4. 就可以执行相关的方法, 返回一个ArrayList 结果集
//String sql = "select * from actor where id >= ?";
// 注意: sql 语句也可以查询部分列
String sql = "select id,name from actor where id >= ?";
//解读
//(1) query 方法就是执行sql语句, 得到一个resultSet ---封装到--> ArrayList 集合中
//(2) 返回
//(3) connection: 连接 , sql: 执行sql语句 ,
// new BeanListHandler<>(Actor.class): 在将resultSet -> Actor 对象 封装到ArrayList
// 底层使用反射机制 去获取Actor 类的属性 然后去封装
// 1 是传给sql语句中 ? 赋值的, 可以多个值, 因为是可变参数
//(4) 底层得到的resultSet , 会在query 关闭, 关闭PreparedStatment
List<Actor> list =
queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);
System.out.println("输出集合信息");
for (Actor actor : list){
System.out.println(actor);
}
//释放资源
JDBCUtilsByDruid.closeConnection(null,null,connection);
}
@Test
//演示 apache-dbutils + druid 完成返回的结果是单行记录(单个对象)
public void testQuerySingle()throws Exception{
//1. 得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2. 使用DBUtils 类和接口,先引入DBUtils 的jar文件, 加入到本Project
//3. 创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4. 就可以执行相关的方法, 返回单个对象
String sql = "select * from actor where id = ?";
//解读:
//因为我们返回的单行记录, 是单个对象, 所以使用的Hander 是 BeanHandler
Actor actor = queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 4);
System.out.println(actor);
//释放资源
JDBCUtilsByDruid.closeConnection(null,null,connection);
}
@Test
//演示 apache-dbutils + druid 完成查询结果是单行单列 返回的就是object
public void testScalar()throws Exception{
//1. 得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2. 使用DBUtils 类和接口,先引入DBUtils 的jar文件, 加入到本Project
//3. 创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4. 就可以执行相关的方法, 返回单行单列, 返回的就是Object
String sql = "select name from actor where id = ?";
//解读:
//因为我们返回的是一个对象, 使用的handler 就是 ScalarHandler
Object obj = queryRunner.query(connection, sql, new ScalarHandler(), 4);//这里返回的就是对象, 如果不存在则返回空
System.out.println(obj);
//释放资源
JDBCUtilsByDruid.closeConnection(null,null,connection);
}
@Test
//演示 apache-dbutils + druid 完成dml (update, insert, delete)
public void testDML() throws Exception{
//1. 得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2. 使用DBUtils 类和接口,先引入DBUtils 的jar文件, 加入到本Project
//3. 创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4. 这里组织sql语句完成 update, insert, delete
// String sql = "insert into actor values(null,?,?,?,?)";
String sql = "delet from actor where id = ?";
//(1) 执行dml 操作是queryRunner.update()
//(2) 返回值是受影响的行数
//int affectedRow = queryRunner.update(connection, sql, "林青霞","女","1966-10-10","116");
int affectedRow = queryRunner.update(connection, sql, 5);
System.out.println(affectedRow > 0 ? "执行成功" : "没有影响到表");
//释放资源
JDBCUtilsByDruid.closeConnection(null,null,connection);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人