• 【JDBC】JDBC的基本使用


    1.概述

    JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。

    使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。

    例如,我们在Java代码中如果要访问MySQL,那么必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是由数据库厂商提供的,例如,MySQL的JDBC驱动由Oracle提供。因此,访问某个具体的数据库,我们只需要引入该厂商提供的JDBC驱动,就可以通过JDBC接口来访问,这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的JDBC驱动:

    使用JDBC的好处是:

    • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;
    • Java程序编译期仅依赖java.sql包,不依赖具体数据库的jar包;
    • 可随时替换底层数据库,访问数据库的Java代码基本不变。

    2.JDBC快速入门

    1. 注册驱动,加载Driver类
    2. 获取链接,得到Connection
    3. 执行增删改查,发送SQL给Mysql执行
    4. 释放资源,关闭相关链接

    MySQL - JDBC驱动各版本下载

    下载官网最新版本即可

    开始导包:

    在这里插入图片描述

    或者更简单的,您可以使用Maven:

    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.30version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用JDBC时,我们先了解什么是Connection。Connection代表一个JDBC连接,它相当于Java程序到数据库的连接(通常是TCP连接)。打开一个Connection时,需要准备URL、用户名和口令,才能成功连接到数据库。

    注册驱动:

    import com.mysql.cj.jdbc.Driver;
    // 1.注册驱动
    Driver driver = new Driver();
    
    • 1
    • 2
    • 3

    得到与数据库jdbc_test链接:

    // 2.得到与数据库jdbc_test链接
    // 底层就是socket连接
    String url = "jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8";
    Properties properties = new Properties();
    properties.setProperty("user","root"); // 用户名
    properties.setProperty("password","root"); // 密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行SQL语句:

    // 3.执行SQL
    String sql = "insert into user values(1,'dahezhiquan','111','中国大学')";
    Statement statement = connect.createStatement();
    int rows = statement.executeUpdate(sql);
    System.out.println(rows > 0 ? "成功":"失败");
    
    • 1
    • 2
    • 3
    • 4
    • 5

    关闭连接:

    // 4.关闭链接
    statement.close();
    connect.close();
    
    • 1
    • 2
    • 3

    3.获取数据库连接的5种方式

    第一种方式:上文使用driver注册驱动创建的方式

    第二种方式:使用反射获取

    /**
     * 使用反射加载driver类
     */
    @Test
    public void test1() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
        Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();
        String url = "jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8";
        Properties properties = new Properties();
        properties.setProperty("user","root"); // 用户名
        properties.setProperty("password","root"); // 密码
        Connection connect = driver.connect(url, properties);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    第三种方式:使用DriverManager进行统一管理

    /**
     * 使用DriverManager进行统一管理
     */
    @Test
    public void test2() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
        Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();
        String url = "jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8";
        String username = "root";
        String password = "root";
        // 注册Driver驱动
        DriverManager.registerDriver(driver);
        Connection connection = DriverManager.getConnection(url, username, password);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    第四种方式:使用Class.forName自动完成注册驱动,进行简化

    /**
     * 简化DriverManager注册
     * 使用Class.forName自动完成注册驱动,进行简化
     */
    @Test
    public void test3() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
        Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8";
        String username = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, username, password);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    第五种方式:使用properties配置文件读取完成连接(最推荐使用🦣)

    MySQL properties文件示例:

    user=root
    password=root
    url=jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8
    driver=com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4

    进行数据库连接操作:

    /**
     * 使用properties配置文件读取完成连接
     */
    @Test
    public void test4() throws IOException, ClassNotFoundException, SQLException {
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, password);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4.ResultSet的基本使用

    对于ResultSet接口,迭代器初始化时被设定在第一行之前的位置,必须调用next方法将它移动到第一行。另外,它没有hasNext方法,我们需要不断地调用next,直至该方法返回false

    代码示例(演示一个查找数据的程序):

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.sql.*;
    import java.util.Properties;
    
    /**
     * ResultSet示例
     */
    public class ResultSetTest {
        public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
            Properties properties = new Properties();
            properties.load(new FileInputStream("src\\mysql.properties"));
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
            String url = properties.getProperty("url");
            String driver = properties.getProperty("driver");
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url, user, password);
            Statement statement = connection.createStatement();
            String sql = "select id,username,password,school from user";
            // 拿到结果集
            ResultSet resultSet = statement.executeQuery(sql);
            // 循环取出数据
            while (resultSet.next()) {
                int id = resultSet.getInt(1);
                String username = resultSet.getString(2);
                String userPassword = resultSet.getString(3);
                String school = resultSet.getString(4);
                System.out.println(id + "\t" + username + "\t" + userPassword +
                        "\t" + school);
            }
            // 关闭资源
            resultSet.close();
            statement.close();
            connection.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    云存储目前面临的3个问题
    Jquery常用操作总结
    STM32F407ZGT6|定时器中断
    wps excel js编程
    设计模式浅析(五) ·单例模式
    [鹏程杯2023]复现
    SQL必需掌握的100个重要知识点:使用视图
    (51单片机)第十一章-串行口应用提高
    【动态规划】C++ dp子数组问题(最大/最长:环形/子数组和、乘积最大/为正数、单词拆分、子串)
    mysql的sum求和函数求和性能优化
  • 原文地址:https://blog.csdn.net/Gherbirthday0916/article/details/126435801