• MySQL---JDBC编程


    1、数据库编程的必备条件

    • 编程语言,如JavaCC++Python
    • 数据库,如OracleMySQLSQL Server
    • 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc

    2、Java的数据库编程:JDBC

            JDBC,即 Java Database Connectivity java 数据库连接。是一种用于执行 SQL 语句的 Java API ,它是Java中的数据库连接规范。这个 API java.sql.*,javax.sql.* 包中的一些类和接口组成,它为 Java开发人员操作数据库提供了一个标准的API ,可以为多种关系数据库提供统一访问。

    3、JDBC工作原理

            JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问 API 的一种高级抽象,它主要包含一些通用的接口类。
            JDBC访问数据库层次结构 :

    JDBC 优势:
    • Java语言访问数据库操作完全面向抽象接口编程
    • 开发数据库应用不用限定在特定数据库厂商的API
    • 程序的可移植性大大增强

     4、JDBC使用

    4.1 JDBC开发案例

    • 准备数据库驱动包,并添加到项目的依赖中:
            在项目中创建文件夹lib ,并将依赖包 mysql-connector-java-5.1.47.jar 复制到 lib 中。再配置该 jar包到本项目的依赖中:右键点击项目Open Module Settings ,在 Modules 中,点击项目,配置
    Dependencies ,点击 + JARS or Directories ,将该 lib 文件夹配置进依赖中,表示该文件夹下的
    jar 包都引入作为依赖。
    • 建立数据库连接
    // 加载 JDBC 驱动程序:反射,这样调用初始化 com.mysql.jdbc.Driver 类,即将该类加载到 JVM 方法
    区,并执行该类的静态方法块、静态属性。
    Class . forName ( "com.mysql.jdbc.Driver" );
    // 创建数据库连接
    Connection connection =
    DriverManager . getConnection ( "jdbc:mysql://localhost:3306/test?
    user=root&password=root&useUnicode=true&characterEncoding=UTF-8" );
    //MySQL 数据连接的 URL 参数格式如下:
    jdbc : mysql : // 服务器地址 : 端口 / 数据库名 ? 参数名 = 参数值
    • 创建操作命令( Statement
    Statement statement = connection . createStatement ();
    • 执行SQL语句
    ResultSet resultSet = statement . executeQuery (
                    "select id, sn, name, qq_mail, classes_id from student" );
    • 处理结果集
    while ( resultSet . next ()) {
                int id = resultSet . getInt ( "id" );
                String sn = resultSet . getString ( "sn" );
                String name = resultSet . getString ( "name" );
                int classesId = resultSet . getInt ( "classes_id" );
                System . out . println ( String . format ( "Student: id=%d, sn=%s, name=%s,
    classesId=%s" , id , sn , name , classesId ));
          }
    • 释放资源(关闭结果集,命令,连接)
    // 关闭结果集
    if ( resultSet != null ) {
        try {
            resultSet . close ();
      } catch ( SQLException e ) {
            e . printStackTrace ();
      }
    }
    // 关闭命令
    if ( statement != null ) {
        try {
            statement . close ();
      } catch ( SQLException e ) {
            e . printStackTrace ();
      }
    }
    // 关闭连接命令
    if ( connection != null ) {
        try {
            connection . close ();
      } catch ( SQLException e ) {
            e . printStackTrace ();
      }
    }

    4.2 JDBC使用步骤总结

            1. 创建数据库连接 Connection
            2. 创建操作命令 Statement
            3. 使用操作命令来执行 SQL
            4. 处理结果集 ResultSet
            5. 释放资源

    5、JDBC常用接口和类

    5.1 JDBC API

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

    5.2 数据库连接Connection

    Connection 接口实现类由数据库提供,获取 Connection 对象通常有两种方式:
    • 一种是通过DriverManager(驱动管理类)的静态方法获取:
    // 加载 JDBC 驱动程序
    Class . forName ( "com.mysql.jdbc.Driver" );
    // 创建数据库连接
    Connection connection = DriverManager . getConnection ( url );
    • 一种是通过 DataSource (数据源)对象获取。 实际应用中会使用 DataSource 对象。
    DataSource ds = new MysqlDataSource ();
    (( MysqlDataSource ) ds ). setUrl ( "jdbc:mysql://localhost:3306/test" );
    (( MysqlDataSource ) ds ). setUser ( "root" );
    (( MysqlDataSource ) ds ). setPassword ( "root" );
    Connection connection = ds . getConnection ();
    • 以上两种方式的区别是:
            1. DriverManager类来获取的 Connection 连接,是无法重复利用的,每次使用完以后释放资源
    时,通过 connection.close() 都是关闭物理连接。
            2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的,每次使用完数据库连接,释放资源调用connection.close() 都是将Conncetion连接对象回收。

    5.3 Statement对象

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

     实际开发中最常用的是PreparedStatement对象,以下对其的总结:

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

    • executeQuery() 方法执行后返回单个结果集的,通常用于select语句
    • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于updateinsertdelete语句

    5.4 ResultSet对象

            ResultSet对象它被称为结果集,它代表符合 SQL 语句条件的所有行,并且它通过一套 getXXX 方法提供了对这些行中数据的访问。
            ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet next()方法 , 如果我们想要得到 ResultSet 里的所有记录,就应该使用 while 循环。

    6. 应用案例

    技术知识点:
    • JDBC APICRUD
    • JDBC API的事务控制
    功能要求:
    • 学生表
                    自动化2019级 5 班新增一名同学程咬金
                    修改该同学的班级为中文系2019级 3
                    查询所有中文系2019级 3 班的同学
                    删除名叫程咬金的同学
    • 成绩表
                    新增许仙同学的成绩:英文80分, Java65 分,计算机原理 76 分,语文 59
                    修改许仙同学的成绩:英文81分
                    删除许仙同学的语文成绩
                    查询中文系2019级 3 班同学的成绩

    7. 内容重点总结

    JDBC 使用步骤:
            1. 创建数据库连接 Connection
                    DriverManager创建
                    DataSource获取
            2. 创建操作命令 Statement
                    PreparedStatement
            3. 使用操作命令来执行 SQL
    // 查询操作
    preparedStatement . executeQuery ();
    // 新增、修改、删除操作
    preparedStatement . executeUpdate ();
             4. 处理结果集ResultSet
    while ( resultSet . next ()) {
        int xxx = resultSet . getInt ( "xxx" );
        String yyy = resultSet . getString ( "yyy" );
    ...
    }
            5. 释放资源
    try {
        if ( resultSet != null ){
            resultSet . close ();
      }
        if ( preparedStatement != null ){
            preparedStatement . close ();
      }
        if ( connection != null ){
            connection . close ();
      }
    } catch ( SQLException e ) {
        e . printStackTrace ();
        throw new RuntimeException ( " 数据库错误 " );
    }
    面试问答:
            1. 数据库连接有哪些方式?分别有什么区别
            2. 数据库 Statement PreparedStatement 有什么区别?

    8. 举例

    • 图书管理系统
            新增貂蝉同学的借阅记录:诗经,从2019 9 25 17:50 2019 10 25 17:50
            查询计算机分类下的图书借阅信息
            修改图书《深入理解Java 虚拟机》的价格为 61.20
            删除id 最大的一条借阅记录

  • 相关阅读:
    CoCube显示测试笔记
    苍穹外卖——项目搭建
    计算机毕业设计Java租车系统(源码+系统+mysql数据库+lw文档)
    华为云云耀云服务器L实例评测|基于Docker环境快速部署Halo个人博客实操
    某物联网数智化园区行业基于 KubeSphere 的云原生实践
    就业形势严峻 求职者如何破解提高竞争力
    数字化转型的“支点”是什么?
    时序预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的时间序列预测
    若依框架以及Mybatis-plus分页插件失效,数据库有多条却只查前十条
    Conda详细介绍
  • 原文地址:https://blog.csdn.net/weixin_51912875/article/details/126035684