JDBC的API详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: JDBC的API详解

🍎道阻且长,行则将至。🍓


目录

一、DriverManager 驱动管理类

1.注册驱动

2.获取数据库连接

二、Connection 数据库连接对象

1.获取执行对象

2.事务管理

三、Statement

1.执行DDL、DML语句

2.执行DQL语句

四、ResultSet


JDBC快速入门的例子为引,使用JDBC有驱动管理,连接对象,执行SQL、查询语句等,下面将对JDBC中常见API进行解释。

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 passd = "1234";
        Connection conn = DriverManager.getConnection(url, username, passd);
        //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();
    }
image.gif

一、DriverManager 驱动管理类

1.注册驱动

在入门案例中我们使用的是:

Class.forName("com.mysql.jdbc.Driver");

先跳转到Driver具体来看,在mysql.jdbc中的Driver类中:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

image.gif

静态代码块执行 DriverManager 对象的 registerDriver() 方法进行驱动的注册,只要加载 Driver 类,该静态代码块就会执行案例中的Class.forName("com.mysql.jdbc.Driver"); 就会加载 Driver 类。

p:在MySQL 5之后的驱动包,可以省略注册驱动的步骤,

image.png

自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类。

2.获取数据库连接

使用的是DriverManager的getConnection方法,方法有三个参数:String url, String user, String password,分别是数据库连接路径、用户名及密码。

@CallerSensitive
    public static Connection getConnection(String url,
        String user, String password) throws SQLException {
        java.util.Properties info = new java.util.Properties();
        if (user != null) {
            info.put("user", user);
        }
        if (password != null) {
            info.put("password", password);
        }
        return (getConnection(url, info, Reflection.getCallerClass()));
    }

image.gif

连接路径url,通常我们这样写:

jdbc:mysql://ip地址(或域名):端口号/数据库名称?参数键值对1&参数键值对2

    • 对于本地mysql服务器,且默认端口3306,可以简写:jdbc:mysql:///数据库名称?参数键值对
    • 添加参数键值对:useSSL=false,禁用安全连接方式,可以解决警告提示。对于多个键值对使用&连接。

    二、Connection 数据库连接对象

    作用是获取执行 SQL 的对象、管理事务。

    1.获取执行对象

    普通执行SQL对象—Statement

    //4. 获取执行sql的对象 Statement
    Statement stmt = conn.createStatement();

    image.gif

    还有不是普通的:

    预编译SQL的执行SQL对象

    image.pngimage.gif

    Creates a CallableStatement object for calling database stored procedures.The CallableStatement object provides methods for setting up its IN and OUT parameters, and methods for executing the call to a stored procedure.

    创建用于调用数据库存储过程的CallableStatement对象。CallableStatement对象提供了设置其IN和OUT参数的方法,以及执行对存储过程的调用的方法。

    注意:此方法针对处理存储过程调用语句进行了优化。当prepareCall方法完成时,某些驱动程序可能会将call语句发送到数据库;其他的可以等到CallableStatement对象执行完。这对用户没有直接影响;但是,它确实会影响哪个方法抛出某些SQL Exceptions。

    执行存储过程的

    image.png

    Converts the given SQL statement into the system's native SQL grammar. A driver may convert the JDBC SQL grammar into its system's native SQL grammar prior to sending it. This method returns the native form of the statement that the driver would have sent.

    将给定的SQL语句转换成系统的本机SQL语法。驱动程序可以在发送之前将JDBC SQL语法转换成其系统的本地SQL语法。

    p:存储过程在MySQL中不常用。

    2.事务管理

    MySQL有以下事务管理的操作:

    开启事务 : BEGIN;   START TRANSACTION;

    提交事务 : COMMIT;

    回滚事务 : ROLLBACK;

    JDBC在Connection接口中定义了3个对应的事务管理方法:

    void setAutoCommit(boolean autoCommit) throws SQLException;
    //开启事务需要将该参数设为为false
    void commit() throws SQLException;
    void rollback() throws SQLException;
    image.gif

    执行一个简单事务例子:

    //定义了两个要执行的sql
    String sql = "update account set money = 2000 where id = 2";
    String sql2 = "update account set money = 2000 where id = 1";
    // 开启事务 【连接conn、执行sql的对象 Statement stmt】
    try {
        conn.setAutoCommit(false);
        int count = stmt.executeUpdate(sql);//受影响的行数
        System.out.println(count);
        int count2 = stmt.executeUpdate(sql2);//受影响的行数
        System.out.println(count2);
    }catch (Exception throwables){
        conn.rollback();
    }

    image.gif

    三、Statement

    作用就是执行SQL语句。

    1.执行DDL、DML语句

    例如上一个例子中的 int count = stmt.executeUpdate(sql);  ,executeUpdate就是用于执行DDL和DML的。

    2.执行DQL语句

    对于一个DQL查询语句使用是executeQuery

    String sql = "select * from account";

    ResultSet rs=stmt.executeQuery(sql);

    这个方法使用到了 ResultSet结果集 对象,封装了SQL查询语句的结果。

    四、ResultSet

    上一节提到ResultSet,封装了SQL查询语句的结果。我们打开ResultSet接口,其中定义了next和一些getXxx方法来操作查询结果:

    boolean next() throws SQLException;
    String getString(int columnIndex) throws SQLException;
    boolean getBoolean(int columnIndex) throws SQLException;
    byte getByte(int columnIndex) throws SQLException;
    int getInt(int columnIndex) throws SQLException;
    double getDouble(int columnIndex) throws SQLException;
    ......
    String getString(String columnLabel) throws SQLException;
    ......
    image.gif
      • next();

      将光标从当前位置向前移动一行,判断当前行是否为有效行。(就是找数据库表下一行)

      方法返回值:

      true :当前行有数据

      false :当前行没有数据

        • getXxx(参数);

        获取数据。

        参数有两种类型:

        int类型的参数:列的编号,从1开始

        String类型的参数: 列的名称

          • 例,定义查询sql并显示查询内容;

          String sql = "select * from account";

          image.png

          image.png

            close  最后也是需要释放资源。

            void close() throws SQLException;

            rs.close();


            aed9b711ac28473c9a92e3f3801436cc.gif

            ☕物有本末,事有终始,知所先后。🍭

            相关实践学习
            如何在云端创建MySQL数据库
            开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
            全面了解阿里云能为你做什么
            阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
            相关文章
            |
            SQL Java 关系型数据库
            JDBC知识【JDBC API详解】第三章下篇
            JDBC知识【JDBC API详解】第三章下篇
            |
            5月前
            |
            SQL Java 数据库连接
            JDBC开发之四大核心API:DriverManager Connection Statement ResultSet
            JDBC开发之四大核心API:DriverManager Connection Statement ResultSet
            40 1
            |
            6月前
            |
            Java 关系型数据库 数据库连接
            实时计算 Flink版操作报错之遇到错误org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'jdbc',该如何解决
            在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
            |
            6月前
            |
            SQL Java 数据库连接
            JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
            JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
            51 0
            |
            6月前
            |
            SQL Java 关系型数据库
            JDBC概念及API详解
            JDBC概念及API详解
            98 2
            |
            6月前
            |
            SQL Java 关系型数据库
            JDBC编程步骤、JDBC API详解和数据库连接池
            JDBC编程步骤、JDBC API详解和数据库连接池
            |
            SQL Java 关系型数据库
            JDBC知识【JDBC API详解】第三章上篇
            JDBC知识【JDBC API详解】第三章上篇
            |
            SQL 存储 Java
            JDBC API 万字详解(通俗易懂)
            JDBC 第二节 详解API 通俗易懂!
            391 0
            |
            SQL Java 数据库连接
            Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作
            Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作
            199 0
            Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作
            |
            SQL druid Java
            原生 JDBC API、连接池概述
            原生 JDBC API、连接池概述
            204 0
            下一篇
            无影云桌面