DBUtils+druid基本使用

Posted 再来半包

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的使用实例

连接池(C3P0&DRUID)DBUtils-DRUID

连接池(C3P0&DRUID)DBUtils-DRUID

JAVA高级——Druid连接池和Apache的DBUtils使用