• JDBC简介和快速入门


    一. 引言

    1. 如何操作数据库

    使用客户端工具访问数据库,需要手工建立连接,输入用户名和密码登录,编写 SQL 语句,点击执行,查看操作结果(结果集或受影响行数)。

    在这里插入图片描述

    2. 实际开发中,会采用客户端操作数据库吗?

    在实际开发中,当用户的数据发生改变时,不可能通过客户端操作执行 SQL 语句,因为操作量过大,无法保证效率和正确性。

    二. 概述

    1. 由来

    提供者:Sun公司
    在这里插入图片描述

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

    2. 概括

    JDBC(Java Database Connectivity) Java 连接数据库的规范(标准),可以使用 Java 语言连接数据库完成CRUD 操作。

    3. 概念

    • JDBC: 就是Java语言操作关系型数据库的一套API
      全称:(Java DataBase Connectivity) Java 数据库 连接

    4. 本质

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

    在这里插入图片描述

    5. 好处

    • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
    • 可随时替换底层数据库,访问数据库的Java代码基本不变以后编写操作数据库的代码只需要面向JDBC(接口),操作哪儿个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。
    • mysql-connector-java-5.1.X 适用于 5.X 版本
      mysql-connector-java-8.0.X 适用于 8.X版本
    • 如下图就是MySQL驱动包(我所提供的是5.1)

    在这里插入图片描述
    百度云链接:https://pan.baidu.com/s/1mG9-n6yZ4vr7VDugGrDdCw
    提取码:SGS1
    注意:在IDEA下,

    • 在项目下新建 lib 文件夹,用于存放 jar 文件
    • 将 mysql 驱动mysql-connector-java-5.1.X复制到项目的 lib 文件夹中
    • 选中 lib 文件夹右键 Add as Libraay,点击 OK

    6. JDBC API

    • JDBC 是由多个接口和类进行功能实现
    类型权限定名简介
    Classjava.sql.DriverManager管理多个数据库驱动类,提供了获取数据库连接的方法
    interfacejava.sql.Connection代表一个数据库连接(当connection不是null时,表示已连接数据库)
    interfacejava.sql.Statement发送SQL语句到数据库工具
    interfacejava.sql.ResultSet保存SQL查询语句的结果数据(结果集)
    classjava.sql.SQLException处理数据库应用程序时所发生的异常

    三. JDBC(Java Database Connectivity)

    1. 流程

    在这里插入图片描述

    • 第一步:编写java代码
    • 第二步:Java代码SQL发送到Mysql服务端
    • 第三步:Mysql服务端接收到SQL语句并执行SQL语句
    • 第四步:将SQL语句执行的结果返回给Java代码

    2. 编写代码步骤

    1. 创建工程,导入驱动jar架包
      在这里插入图片描述
    • 常用接口

      • DriverManager(驱动管理)类:管理不同的驱动
      • Connection(连接)接口:连接数据库
      • Statement(声明)接口:执行sql语句
      • ResultSet(结果集)接口:接收查询的结果集
    1. 注册驱动

    使用 Class.forName("com.mysql.jdbc.Driver");手动加载字节码文件到 JVM 中

    • 方案一
    Driver driver = new com.mysql.jdbc.Driver();
    DriverManager.registerDriver(driver);
    
    • 1
    • 2
    • 方案二:反射机制

      会加载类,在加载类时,就会执行静态代码块
      在静态代码块中有创建驱动对象已经注册驱动代码
      加载驱动的操作只会被执行一次

    Class.forName("com.mysql.jdbc.Driver");
    
    • 1
    1. 获取连接数据库

    URL(Uniform Resource Locator) 统一资源定位符:由协议、IP、端口、SID(程序实例名称)组成
    Java代码需要发送SQL给MySQL服务端,就需要先建立连接
    url:数据库的连接地址
    mysql的url形式:jdbc:mysql://主机地址:端口号/数据库名称?连接参数
    username:用户名
    password:密码

    Connection conn=DriverManager.getConnection(url,username,password);
    
    • 1
    1. 获取SQL对象

    通过 Connection 对象获得 Statement 对象,用于对数据库进行通用访问。
    执行SQL语句需要SQL执行对象,而这个执行对象就是Statement发射对象

    Statement stmt = conn.createStatement();
    
    • 1
    1. 执行SQL对象

    注意:在编写 DML 语句时,一定要注意字符串参数的符号是单引号 '值'

    statement.execute(sql);//何sql语句都能执行 返回值true代表有结果集,false代表没有
    stmt.executeUpdate(sql);//执行非查询语句一般指DML和DDL
    /**
    * DML:返回值代表受影响的行数
    * DDL:返回值为0
    */
    stmt.executeQuery(sql);//执行select,show有结果集的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 处理返回结果

    查询结果集:迭代、依次获取。

    ResultSet resultSet = statement.getResultSet();
    /**
    * rs.next() 如果返回值为true还有记录
    * 调用完next方法之后,rs结果集对象本身就引用了一条记录
    * 每调用一次next方法,rs就引用下一条记录
    */
    while (resultSet.next()) {
                //通过结果集对象,获取记录中的字段值
                int id = resultSet.getInt("id");//resultSet.getInt("字段名");根据字段名获取
                String name = resultSet.getString("name");
                double price = resultSet.getDouble("money");
                System.out.println("{id="+id+",name="+name+",price="+price+"}");
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    受影响行数:逻辑判断、方法返回。

    if(result == 1){
     System.out.println("Success"); 
     }
    
    • 1
    • 2
    • 3

    可以让rs指向指定的记录,参数为记录的行
    resultSet.afterLast();//直接移动到最后一行
    resultSet.beforeFirst()//重新指向最开始位置
    resultSet.first() //指向第一条
    resultSet.last() //最后一条
    resultSet.findColumn() //根据字段名获取所在列
    resultSet.insertRow();增加一行 结果集和数据库
    resultSet.deleteRow();删除一行
    resultSet.updateRow();更新一行

    1. 释放资源

    遵循先开后关原则,释放所使用到的资源对象

      stmt.close();
      conn.close();
    
    • 1
    • 2

    3. 具体操作

    • 创建新的空的项目
      在这里插入图片描述

    • 定义项目的名称,并指定位置
      在这里插入图片描述

    • 对项目进行设置,JDK版本、编译版本
      在这里插入图片描述

    • 创建模块,指定模块的名称及位置
      在这里插入图片描述

    • 导入驱动包
      将mysql的驱动包放在模块下的lib目录(随意命名)下,并将该jar包添加为库文件
      在这里插入图片描述

    • 在添加为库文件的时候,有如下三个选项

      • Global Library:全局有效
      • Project Library:项目有效
      • Module Library:模块有效

    在这里插入图片描述

    • 在src下创建类
      在这里插入图片描述
    • 编写代码如下
    /**
    * JDBC快速入门
    */
    public class JDBCDemo {
        public static void main(String[] args) throws
    Exception {
            //1. 注册驱动
            //Class.forName("com.mysql.jdbc.Driver");
            //2. 获取连接
            String url =
    "jdbc:mysql://127.0.0.1:3306/db1";
            String username = "root";
            String password = "1234";
            Connection conn =
    DriverManager.getConnection(url, username,
    password);
            //3. 定义sql
            String sql = "update account set money =
    2000 where id = 1";
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            int count = stmt.executeUpdate(sql);//受影响的行数
            //6. 处理结果
            System.out.println(count);
            //7. 释放资源
            stmt.close();
            conn.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

    结果:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    国内与海外风控模型的差异内容
    qemu 内核调试环境搭建
    Android Jetpack系列(九):WorkManager(源码篇)
    电磁兼容——电子系统的EMC要求
    71、Spring Data JPA 的 样本查询--参数作为样本去查询数据库的数据,也可以定义查询的匹配规则
    进阶JS-作用域和作用域链
    Redis-数据类型-Bit的基本操作-getbit-setbit-Bitmap
    吃透『MySQL』系列,手把手解析相关问题
    what is flinksql hint?
    【Mongo|1】MongoDB常用命令详细介绍
  • 原文地址:https://blog.csdn.net/o676448/article/details/126693856