当前位置: 首页 > article >正文

Java中的JDBC操作详解、JDBC工具类的编写以及DBUtils工具包的使用

文章目录

  • 一、JDBC概述
  • 二、JDBC语句
    • 1、JDBC流程
    • 2、JDBC中DML语句
    • 3、JDBC中DQL语句
  • 三、JDBC工具类编写
    • 1、编写Properties配置文件
    • 2、编写JDBC工具类
  • 四、DBUtils工具包
    • 1、BeanHandler
    • 2、BeanListHandler
    • 3、ScalarHandler


一、JDBC概述

Java DataBase Connectivity: Java 数据库连接技术

通过Java语言操作数据库,是sun公司定义的一套操作所有关系型数据库的规则(接口),各个数据库厂商去实现这套接口,提供数据库驱动jar包

二、JDBC语句

1、JDBC流程

  1. 注册驱动(可以省略)
  2. 获取数据库连接对象 Connection
  3. 定义sql
  4. 获取执行sql语句的对象 Statement
  5. 执行sql,接收返回结果
  6. 处理结果
  7. 释放资源

执行时会出现时区问题:
解决方案:

?serverTimezone=Asia/Shanghai

2、JDBC中DML语句

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Code01{
    public static void main(String[] args) throws Exception{
        // 1. 注册驱动(安转驱动)  此时这句话可以省略  如果书写的话,mysql8.0 带 cj
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2. 获取数据库连接对象 Connection
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2?serverTimezone=Asia/Shanghai","root","root");
        // 3. 定义sql语句
        String sql = "insert into dept values(1,'咨询部','杭州')";
        // 4. 获取执行sql语句的对象 Statement
        Statement statement = conn.createStatement();
        // 5. 执行sql
        boolean result = statement.execute(sql);
        // 6. 处理结果
        System.out.println(result);
        // 7. 释放资源
        statement.close();
        conn.close();
    }
}

3、JDBC中DQL语句

import java.sql.*;

public class Code02 {
    public static void main(String[] args) throws Exception {
        // 注册驱动(省略了)
        // 获取连接
        Connection coon = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb03", "root", "root");
        // 定义sql语句
        String sql = "select * from dept";
        // 获取执行sql语句的对象 preparedStatement
        PreparedStatement preparedStatement = coon.prepareStatement(sql);
        //获取查询结果
        ResultSet resultSet = preparedStatement.executeQuery();
        //处理结果 循环打印
        while (resultSet.next()){
            int dept_id = resultSet.getInt("dept_id");
            String name = resultSet.getString("name");
            String local = resultSet.getString("local");
            System.out.println(dept_id + "\t" + name + "\t" + local);
        }
        //关闭连接
        preparedStatement.close();
        coon.close();
    }
}

三、JDBC工具类编写

1、编写Properties配置文件

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb03?serverTimezone=Asia/Shanghai
jdbc.user=root
jdbc.password=root

2、编写JDBC工具类

import java.sql.*;
import java.util.ResourceBundle;

public class JdbcUtils {
    private static String driver = null;
    private static String url = null;
    private static String user = null;
    private static String password = null;
    private static Connection conn = null;
    // 静态代码块在该类被加载的时候只执行一次
    static {
        // 读取properties配置文件中的内容
        ResourceBundle db = ResourceBundle.getBundle("db");
        driver = db.getString("jdbc.driver");
        url = db.getString("jdbc.url");
        user = db.getString("jdbc.user");
        password = db.getString("jdbc.password");
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 对外部使用的 用来得到Connection对象方法
    public static Connection getConn() {
        return conn;
    }
    //关闭所有对象方法
    public static void close(ResultSet resultSet, PreparedStatement statement, Connection connection) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

四、DBUtils工具包

DbUtils给我们提供了10个ResultSetHandler实现类,分别是:

  1. ArrayHandler: 将查询结果的第一行数据,保存到Object数组中
  2. ArrayListHandler 将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合
  3. BeanHandler 将查询结果的第一行数据,封装到user对象
  4. BeanListHandler 将查询结果的每一行封装到user对象,然后再存入List集合
  5. ColumnListHandler 将查询结果的指定列的数据封装到List集合中
  6. MapHandler 将查询结果的第一行数据封装到map结合
  7. MapListHandler 将查询结果的每一行封装到map集合,再将map集合存入List集合
  8. BeanMapHandler 将查询结果的每一行数据,封装到User对象,再存入map集合中
  9. KeyedHandler 将查询的结果的每一行数据,封装到map1,然后将map1集合(多个)存入map2集合(一个)
  10. ScalarHandler 封装类似count、avg、max、min、sum…函数的执行结果
    常用的是BeanHandler、BeanListHandler和ScalarHandler

1、BeanHandler

public class Code06 {
    public static void main(String[] args) throws SQLException {

        Connection conn = JdbcUtils.getConn();
        QueryRunner queryRunner = new QueryRunner();
        String sql = "select * from users";
        // 将查询结果的第一行数据,封装到user对象
        Users query = queryRunner.query(conn, sql, new BeanHandler<Users>(Users.class));
        System.out.println(query);
    }
}
// 运行结果:Users{userName = zhangsan, password = 123456}

2、BeanListHandler

public class Code07 {

    public static void main(String[] args) throws SQLException {

        Connection conn = JdbcUtils.getConn();
        QueryRunner queryRunner = new QueryRunner();
        String sql = "select * from users";
        // BeanListHandler 将查询结果的每一行封装到user对象,然后再存入List集合
        List<Users> query = queryRunner.query(conn, sql, new BeanListHandler<Users>(Users.class));
        System.out.println(query);
    }
}

// 运行结果:[Users{userName = zhangsan, password = 123456}, Users{userName = lisi, password = 123123}, Users{userName = 陈嘉豪, password = 123124}]

3、ScalarHandler

public class Code08 {
    public static void main(String[] args) throws SQLException {

        Connection conn = JdbcUtils.getConn();
        QueryRunner queryRunner = new QueryRunner();
        String sql = "select count(*) from users";
        Object query = queryRunner.query(conn, sql, new ScalarHandler());
        System.out.println(query);
    }
}

// 运行结果:3

http://www.kler.cn/news/341268.html

相关文章:

  • Linux高阶——0928—Github数据上传markdown语言
  • Jedis多线程环境报错:redis Could not get a resource from the pool 的主要原因及解决办法。
  • HyperWorks基于几何投影的网格变形
  • Laravel Filament 如何配置多语言支持
  • HalconDotNet实现分水岭图像分割算法详解
  • Leetcode 下一个排列
  • contact form 7设置方法与详细步骤
  • 网页前端开发之Javascript入门篇(9/9):对象
  • 自动化测试 | alert处理
  • 【深度学习总结】热力图-Grad-CAM使用
  • [持续更新]程序员每天会阅读哪些技术网站(带链接)来提升自己?
  • 谁能跟我比操作系统?
  • Python | Leetcode Python题解之第459题重复的子字符串
  • Nacos-Feign-Gateway-SpringCloud微服务
  • 本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃
  • Python-Pandas
  • java算法OJ(2)链表
  • CUDA、Pytorch、Pycharm的安装与配置
  • 017 平台属性[属性分组、规格参数、销售属性]
  • Android 10.0 修改Systemui三键导航栏虚拟按键颜色功能实现