【MySQL探索之旅】JDBC (Java连接MySQL数据库)

📚博客主页:爱敲代码的小杨.

✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 1. JDBC 的概念
    • 1.1 JDBC 的概念
    • 1.2 JDBC 的本质
    • 1.3 JDBC 的好处
    • 2. JDBC 的使用
      • 2.1 编写代码的步骤
      • 3. JDBC 常用类和接口
        • 3.1 JDBC API
        • 3.2 Connection
        • 3.3 Statement

          1. JDBC 的概念

          1.1 JDBC 的概念

          JDBC : 就是使用 Java 语言操作关系型数据库的一套 API

          JDBC 全称:( Java DataBase Connectivity ) Java 数据库连接

          我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。我们要做到的是同一套Java代码操作不同的关系型数据库,而此时sun公司就指定了一套标准接口(JDBC),JDBC中定义了所有操作关系型数据库的规则。众所周知接口是无法直接使用的,我们需要使用接口的实现类,而这套实现类(称之为:驱动)就由各自的数据库厂商给出。

          1.2 JDBC 的本质

          • 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
          • 各个数据库厂商去实现这套接口,提供数据库驱动 jar包
          • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类

            1.3 JDBC 的好处

            • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
            • 可随时替换底层数据库,访问数据库的Java代码基本不变

              以后编写操作数据库的代码只需要面向JDBC(接口),操作哪儿个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。(关注文末的公众号回复:MySQL即可获取驱动包)

              2. JDBC 的使用

              Java 操作数据库的流程

              2.1 编写代码的步骤

              1. 创建工程, 导入驱动 jar 包

              添加库

              1. 创建数据源(DataSource)
              // 1. 创建数据源(DataSource)
              DataSource dataSource = new MysqlDataSource();
              ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/你的数据名?characterEncoding=utf8&useSSL=false");
              ((MysqlDataSource) dataSource).setUser("你的用户名");
              ((MysqlDataSource) dataSource).setPassword("你的密码");
              
              1. 连接数据库服务器
              // 2. 连接数据库服务器
              Connection connection = dataSource.getConnection();
              
              1. 构造操作数据库的 SQL 语句
              System.out.println("请输入id");
              int id = input.nextInt();
              System.out.println("请输入姓名");
              String name = input.next();;
              String sql = "insert into 你的表名 values (?,?)"; // sql语句
              PreparedStatement preparedStatement = connection.prepareStatement(sql);  // 构造 "语句对象"
              preparedStatement.setInt(1, id);
              preparedStatement.setString(2, name);
              
              1. 执行 SQL 语句
              int n = preparedStatement.executeUpdate();
              System.out.println("n = " + n);
              
              1. 释放资源
              preparedStatement.close();
              connection.close();
              

              案例

              import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
              import javax.sql.DataSource;
              import java.sql.Connection;
              import java.sql.PreparedStatement;
              import java.sql.SQLException;
              import java.util.Scanner;
              public class JDBCDemo { public static void main(String[] args) throws SQLException { Scanner input = new Scanner(System.in);
                      // 1. 创建数据源(DataSource)
                      DataSource dataSource = new MysqlDataSource();
                      ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");
                      ((MysqlDataSource) dataSource).setUser("root");
                      ((MysqlDataSource) dataSource).setPassword("1234");
                      // 2. 连接数据库服务器
                      Connection connection = dataSource.getConnection();
                      // 3. 构造操作数据库的 SQL 语句
                      System.out.println("请输入id");
                      int id = input.nextInt();
                      System.out.println("请输入姓名");
                      String name = input.next();;
                      String sql = "insert into test values (?,?)";
                      PreparedStatement preparedStatement = connection.prepareStatement(sql);  // 构造 "语句对象"
                      preparedStatement.setInt(1, id);
                      preparedStatement.setString(2, name);
                      // 4. 执行 SQL语句
                      int n = preparedStatement.executeUpdate();
                      System.out.println("n = " + n);
                      // 5. 释放资源
                      preparedStatement.close();
                      connection.close();
                  }
              }
              

              运行结果:

              3. JDBC 常用类和接口

              3.1 JDBC API

              在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握 Java JDBC API (位于 java.sql 包下) 即可掌握 Java 数据库编程。

              3.2 Connection

              Connection接口实现类由数据库提供,获取 Connection对象通常有两种方式:

              1. 一种是通过 DriverManager(驱动管理类)的静态方法获取:
              // 加载 JDBC 驱动程序
              Class.forName("com.mysql.jdbc.Driver");
              // 创建数据库连接
              Connection connection = DriverManager.getConnection(url);
              
              1. 一种是通过 DataSource(数据源)对象获取。实际应用中会使用 DataSource对象。
              DataSource dataSource = new MysqlDataSource();
              ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");
              ((MysqlDataSource) dataSource).setUser("root");
              ((MysqlDataSource) dataSource).setPassword("1234");
              

              区别:

              1. DriverManager类来获取的 Connection 连接,是无法重复利用的,每次使用完以后释放资源时,通过 connection.close()都是关闭物理连接。
              2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的,每次使用完数据库连接,释放资源调用 connection.close()都是将 Conncetion连接对象回收。

              3.3 Statement

              Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。

              实际开发中最常用的是 PreparedStatement对象

              总结:

              主要掌握两种执行 SQL 的方法:

              1. executeQuery() 方法执行后返回单个结果集的,通常用于 select语句
              2. executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句