DBUtils+druid基本使用
Posted 再来半包
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBUtils+druid基本使用相关的知识,希望对你有一定的参考价值。
DBUtils+druid
DBUtils + druid实现数据库增删查改
DBUtils + druid实现多行数据查询
//演示 apache - dbutils + druid 完成 返回的结果是多行记录(多个对象)List
public void testQueryMany() throws SQLException { // 返回结果是多行的情况
//1.得到连接(druid)
Connection connection=JDBCUtilsByDruid.getConnection();
//2.使用DBUtils类和接口,先引入DBUtils 相关的jar
//3.创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
String sql="select * from course where course_id>=?";
//4.就可以执行相关的方法,返回ArrayList结果集
//4.1、query 方法 就是执行sql语句,得到resultset ----封装到 -->ArrayList集合中
//4.2、返回集合
//4.3、connection:连接
//4.4、sql:执行的sql语句
//4.5、new BeanListHandler<>(student.class):在将resultset -->student对象-->封装到ArrayList中
// 底层使用反射机制,去获取student类的属性,然后进行封装
//4.6、1:就是给sql语句中问号赋值的,可以有多个值,因为他是可变的参数 Object...params
//4.7、底层得到的resultset,会在query关闭,也会关闭PreparedStatment
List<student> query =
queryRunner.query(connection,sql , new BeanListHandler<>(student.class), "c1");
System.out.println(query.size());
for (student studen:query){
System.out.println(studen);
}
//释放资源
JDBCUtilsByDruid.close(null,null,connection);
}
new BeanListHandler<>(student.class) 通过反射,去查找javaBean中有多少属性,从而在数据库中查找到对相应的数据存入到结果集(List)中
DBUtils + druid实现单行数据查询
//演示 apache - dbutils + druid 完成 返回的结果是单行记录(单个对象)
public void testQuerySingle() throws SQLException {
//1.得到 连接(druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2.使用 DBUtils 类和接口 ,先引入DBUtils 相关的jar
//3.创建QueryRunner
QueryRunner queryRunner=new QueryRunner();
//4.执行相关方法,返回单个对象
String sql="select * from course where course_id=?";
student c1 = queryRunner.query(connection, sql, new BeanHandler<>(student.class), "c1");
System.out.println(c1);
//释放资源
JDBCUtilsByDruid.close(null,null,connection);
}
new BeanHandler<>(student.class) 通过反射查询javaBean类中的属性
返回单行数据
DBUtils + druid实现单个数据查询
//演示 DBUtils + druid 完成查询结果是单行单列的--->返回的就是Object
@Test
public void testScalar() throws SQLException {
//1.得到连接
Connection connection= JDBCUtilsByDruid.getConnection();
//2.使用 DBUtils 类和接口
//3.创建QueryRunner
QueryRunner queryRunner=new QueryRunner();
//4.创建sql语句
String sql="select course_name from course where course_id=?";
Object c1 = queryRunner.query(connection, sql, new ScalarHandler(), "c1");
System.out.println(c1);
System.out.println();
//释放资源
JDBCUtilsByDruid.close(null,null,connection);
}
new ScalarHandler() 查询单个数据时用到的方法
返回一个Object类型的数据
DBUtils + druid实现数据库DML
//演示apache- dbutils +druid 完成DML(update , insert , delete)
@Test
public void testDML() throws SQLException {
//1.得到连接
Connection connection=JDBCUtilsByDruid.getConnection();
//2.使用DBUtils 类和接口,
//3.创建QueryRunner
QueryRunner queryRunner=new QueryRunner();
//4.这里组织sql 完成update ,insert ,delete
//修改数据库
// String sql="update course set course_name=? where course_id=?";
// int update = queryRunner.update(connection, sql,"杨过","c5");
//插入一条数据到数据库
// String sql2="insert into course value('c4','才春磊','2002')";
// int update2=queryRunner.update(connection, sql2);
//从数据库中删除一条数据
String sql3="delete from course where course_id=?";
int update3=queryRunner.update(connection,sql3,"c5");
System.out.println(update3>0?"执行成功":"没有影响到数据库");
//释放资源
JDBCUtilsByDruid.close(null,null,connection);
}
修改数据库中的一条数据
//修改数据库
String sql="update course set course_name=? where course_id=?";
int update = queryRunner.update(connection, sql,"杨过","c5");
插入一条数据到数据库
//插入一条数据到数据库
String sql2="insert into course value('c4','才春磊','2002')";
int update2=queryRunner.update(connection, sql2);
从数据库中删除一条数据
//从数据库中删除一条数据
String sql3="delete from course where course_id=?";
int update3=queryRunner.update(connection,sql3,"c5");
queryRunner.update方法返回的int类型是执行操作后数据库中受影响的行数
最后释放资源
JDBCUtilsByDruid.close(null,null,connection);
BasicDao实例
BasicDao.java
package com.hb.dao_.dao;
import com.hb.dao_.utils.JDBCUtilsByDruid;
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 java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/*
*
* @Author ccl
* @Description //开发BasicDao,其他dao的父类
* @Date 11:44 2021/7/5
* @return
**/
public class BasicDao<T> { //泛型指定具体类型
private QueryRunner qr=new QueryRunner();
//开发通用的dml方法,针对任意的表
public int update(String sql ,Object... parameters){
//定义Connection
Connection connection=null;
try {
connection= JDBCUtilsByDruid.getConnection();
int update = qr.update(connection, sql, parameters);
return update;
} catch (SQLException e) {
throw new RuntimeException(e); //将编译异常 变为 运行异常,抛出
}finally {
JDBCUtilsByDruid.close(null,null,connection);
}
}
/*
*
* @Author ccl
* @Description sql sql语句可以有?
* clazz 传入一个类的Class对象,比如course.class
* parameters 传入?的具体的值,可以是多个
* @Date 11:54 2021/7/5
* @return
**/
//返回多个对象(即查询的结果是多行),针对任意表
public List<T> queryMulti(String sql, Class<T> clazz,Object... parameters){
Connection connection=null;
try {
connection=JDBCUtilsByDruid.getConnection();
return qr.query(connection,sql,new BeanListHandler<>(clazz),parameters);
} catch (SQLException e) {
throw new RuntimeException(e);
}finally {
JDBCUtilsByDruid.close(null,null,connection);
}
}
//查询单行结果的通用方法
public T querySingle(String sql ,Class<T> clazz,Object... parameters){
Connection connection=null;
try {
connection=JDBCUtilsByDruid.getConnection();
return qr.query(connection,sql,new BeanHandler<T>(clazz),parameters);
} catch (SQLException e) {
throw new RuntimeException(e);
}finally {
JDBCUtilsByDruid.close(null,null,connection);
}
}
//查询单行单列的方法,即返回单值的方法
public Object queryScalar(String sql, Object... parameters){
Connection connection=null;
try {
connection=JDBCUtilsByDruid.getConnection();
return qr.query(connection,sql,new ScalarHandler(),parameters);
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
JDBCUtilsByDruid.close(null,null,connection);
}
}
}
Goods.java
public class GoodsDao extends BasicDao<Goods>{
}
因为是继承了BasicDao,所以Goods类中有BasicDao中的所有方法
插入一条数据到数据库中
GoodsDao goodsDao=new GoodsDao();
int update = goodsDao.update("insert into Goods values(?,?,?)", 2, "vivo", 3000);
System.out.println(update>0?"插入成功":"没有对表发生改变");
修改数据库中的数据
GoodsDao goodsDao=new GoodsDao();
int apple = goodsDao.update("update Goods set goods_name=? where id=?", "苹果手机", 1);
System.out.println(apple>0?"修改成功":"没有对表发生改变");
删除数据库中的一条数据
GoodsDao goodsDao=new GoodsDao();
int update1 = goodsDao.update("delete from Goods where id=?", 1);
System.out.println(update1>0?"删除成功":"数据库没有发生改变");
查询多行数据
GoodsDao goodsDao=new GoodsDao();
List<Goods> goods = goodsDao.queryMulti("select*from Goods where id>=?", Goods.class, "1");
for (Goods g:goods){
System.out.println(g);
}
查询单行数据
GoodsDao goodsDao=new GoodsDao();
Goods goods = goodsDao.querySingle("select*from Goods where id=?", Goods.class, 1);
System.out.println(goods);
查询单行单列数据
GoodsDao goodsDao=new GoodsDao();
Object o = goodsDao.queryScalar("select goods_name from Goods where id=?", 4);
System.out.println(o);
以上是关于DBUtils+druid基本使用的主要内容,如果未能解决你的问题,请参考以下文章
后端开发Druid数据库连接池,DbUtils.QueryRunner和DbUtils.closeQuietly的使用实例
后端开发Druid数据库连接池,DbUtils.QueryRunner和DbUtils.closeQuietly的使用实例
后端开发Druid数据库连接池,DbUtils.QueryRunner和DbUtils.closeQuietly的使用实例