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


一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值