• <MySQL> 什么是JDBC?如何使用JDBC进行编程?


    目录

    一、JDBC是什么?

    二、JDBC常用接口和类

    2.1 DataSource

    2.2 Connection

    2.3 Statement

    2.4 ResultSet

    三、JDBC的使用

    3.1 获得数据库驱动包

    3.2 添加到项目依赖

    3.3 描述数据库服务器

    3.4 建立数据库连接

    3.6 执行SQL语句和接收返回数据

    3.7 释放资源


    一、JDBC是什么?

            世界上编程语言和数据库软件繁多,数据库软件为了适应不同的编程语言,提供了不同的数据库驱动包。MySQL提供了Java语言的驱动包mysql-connector-java。

            JDBC(Java Database Connectivity)就是Java数据库连接,是用于执行SQL语句的Java API,也是Java中的数据库连接规范。JDBC为Java开发人员操作数据库提供了一套标准的API,可以为多种关系型数据库软件提供统一的访问方式,其中就包括MySQL。

    JDBC的优点:

    JDBC编程中,对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。这使得Java语言访问数据库操作完全面向接口编程。

    使用JDBC后,Java 程序能够与各种数据库系统进行交互,而不用限定在特定数据库厂商的API。
    程序有良好的跨平台能力强和可移植性高。

    二、JDBC常用接口和类

    有以下常用接口和类:

    接口名/类名说明
    DataSource数据库源,用于指定数据库地址和其他数据库相关信息。
    Connection连接,用于和数据库建立连接。
    Statement语句,用于将SQL语句发送到数据库。
    ResultSet结果集,用于记录符合SQL语句条件的结果。

    2.1 DataSource

            数据源(DataSource),用于指定数据库地址和其他数据库相关信息,这些语句写法通常是有固定格式的。

            在指定数据库源之前,需要先明确数据库软件是什么?比如使用的是 MySQL ,那么在使用 DataSource 接口创建对象时,就应该使用关于 MySQL 的实现类 MysqlDataSource

    实现类 MysqlDataSource有以下几个常用方法:

    方法释义(都为字符串格式)
    setUrl设置服务器地址。格式为:jdbc:mysql://服务器地址:端口:/(数据库名?参数名=参数值......)(括号中根据实际需要取舍)
    setUser输入数据库服务器的账户名。
    setPassword指定账户的密码。

    2.2 Connection

            连接(Connection),主要用于和数据库建立连接,使用的方法是 getConnection() 。

    可以通过两种方式实现数据库连接(connection):

    连接(connection)方式说明
    DriverManager驱动管理类。通过静态方法获取,需要使用“反射”机制,不做介绍(或者以后补充,啊哈)
    DataSource数据源接口。详见上文。

    使用 DriverManager 连接和使用 DataSource 连接的区别:

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

    2.3 Statement

            语句(Statement),主要用于将SQL语句发送到数据库中,执行SQL。

    JDBC API中主要提供了三种Statement对象:

    Statement语句。用于执行不带参数的简单SQL语句。
    PreparedStatement预处理语句。无论是否带参数,SQL语句都会先预编译,再传输给数据库系统,执行速度快于 Statement 对象。在实际开发中最常用。
    CallableStatement可调用语句。用于执行数据库存储过程的调用。

    PreparedStatement 对象的特点:

    (1)参数化SQL查询。

    (2)SQL语句预编译。
    (3)性能高于 Statement 。
    (4)可以阻止常见的SQL语句注入攻击。
    (5)使用占位符指代参数,占位符下标从1开始。
    (6)占位符不能使用多值,即一个占位符只能指代一个参数。

    执行SQL的常用方法:

    方法名说明
    executeQuery()执行方法后,返回单个结果集(ResultSet对象),通常用于select语句。
    executeUpdate()

    执行方法后,返回一个整数值,指代受该SQL语句影响的数据行行数,通常用于update、insert、delete语句。

    2.4 ResultSet

            结果集(ResultSet),用于记录符合SQL语句条件的结果,通过一系列getXXX的方法,可以对结果集中的数据进行访问。


    三、JDBC的使用

    3.1 获得数据库驱动包

    网址:

    https://mvnrepository.com/

    查找:

    版本:根据自己的MySQL版本自行选择对应的包

    下载:

    3.2 添加到项目依赖

    在项目中新建目录:

    将包拷贝到目录下,并add:

    之后可以正式开始JDBC编程。

    3.3 描述数据库服务器

    1. //导入的包;
    2. import javax.sql.DataSource;
    3. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    4. //创建数据源;
    5. DataSource datasource = new MysqlDataSource();
    6. //输入数据库服务器地址;
    7. ((MysqlDataSource)datasource).setUrl("jdbc:mysql://服务器地址:端口/");
    8. //输入账户名;
    9. ((MysqlDataSource)datasource).setUser("账户名");
    10. //输入密码;
    11. ((MysqlDataSource)datasource).setPassword("密码");

    创建数据源:

    可以使用以下方法创建说明
    DataSource datasource = new MysqlDataSource();DataSource是一个接口,使用DataSource的实现类MysqlDataSource创建实例。
    MysqlDataSource datasource = new MysqlDataSource();直接使用MysqlDataSource创建实例。

    输入数据库服务器地址:

    向下转型:

    DataSource接口没有setUrl、setUser、setPassword方法,向下转型为MysqlDataSource才能使用,即((MysqlDataSource)datasource)。

    参数为字符串:setUrl、setUser、setPassword三个方法,参数都为字符串。
    服务器地址格式说明

    jdbc:mysql://服务器地址:端口/

    指定服务器地址和端口,如果服务器和客户端都在本地,可以使用127.0.0.1作为服务器地址,使用默认的3306作为端口;
    在已有数据库database的情况下,也可以直接连接到数据库:
    格式:

    jdbc:mysql://服务器地址:端口/数据库名?字符集=参数...其他参数=参数.......

    3.4 建立数据库连接

    1. //导入的包;
    2. import java.sql.Connection;
    3. import java.sql.SQLException;
    4. //建立连接;
    5. Connection connection = datasource.getConnection();

    建立连接:

    datasource.getConnection() 方法会抛出异常,使用 throws 抛出或使用 cry/catch 捕获异常。

    3.5 创建SQL语句对象

    1. //导入的包;
    2. import java.sql.PreparedStatement;
    3. //创建SQL语句对象;
    4. //例:创建数据库;
    5. PreparedStatement statement = connection.prepareStatement
    6. ("create database if not exists 数据库名 character set 字符集名;");
    7. //例:创建数据表;
    8. PreparedStatement statement = connection.prepareStatement
    9. ("create table if not exists 表名(列名 数据类型 约束,......);");
    10. //例:参数化SQL语句,插入数据行;
    11. PreparedStatement statement = connection.prepareStatement
    12. ("insert into 表名 values(?,?)");
    13. statement.setInt(下标,值);
    14. statement.setString(下标,值);
    使用 connection.prepareStatement() 方法将字符串转化为SQL语句对象。
    使用了 PreparedStatement 类,SQL语句可以参数化,如上文例子,将insert语句中需要插入的值通过占位符“?”代替,再由 PreparedStatement 类提供的一系列 setXXX 方法,对占位符的数值进行设置
    setXXX 方法参数中的下标,从1开始,1就代表第一个占位符“?”号

    3.6 执行SQL语句和接收返回数据

    增、删、改操作:

    1. //进行增、删、改操作;
    2. //执行SQL语句并接收int型返回值;
    3. int n = statement.executeUpdate();
    增、删、改操作使用 executeUpdate() 方法:返回值为 int 类型,返回的是执行该语句后,受到影响的数据行行数。

    查询操作:

    1. //导入的包;
    2. import java.sql.ResultSet;
    3. //进行查询操作;
    4. //执行SQl语句,并接受ResultSet结果集;
    5. ResultSet resultSet = statement.executeQuery();
    6. //遍历结果集resultSet,得到查询的数据;
    7. while (resultSet.next()){
    8. System.out.println(resultSet.getXXX(列下标/列名));
    9. }
    查询操作使用 executeQuery() 方法:返回值为 ResultSet 类型,是一个结果集,这个结果集是MySQl中的临时表。
    想要得到结果集的数据,需要使用 resultSet.next() 方法来获得判断是否存在下一数据,并移动指针。
    ResultSet 类提供了一系列的 getXXX 方法来获得结果集中的数据,参数可以是数据表中列的下标,也可以是列名等。

    3.7 释放资源

    1. //释放资源;
    2. //关闭结果集;
    3. resultSet.close();
    4. //关闭命令;
    5. statement.close();
    6. //关闭连接;
    7. connection.close();
    对于对象内部持有一些计算机重要的软硬件资源的对象,应当在使用完毕后及时释放。
    释放资源应当后创建的先释放,先创建的后释放。

  • 相关阅读:
    mulesoft Module 6 quiz 解析
    Vue2:状态管理 Vuex 3.x
    高等数学教材啃书汇总重难点(二)导数与微分
    金仓数据库KingbaseES数据库管理员指南--15.2. 管理序列
    猫头虎解析:如何巧妙避免GET请求中的“EOF“错误?
    继承和多态
    完美解决:sh: /usr/bin/xauth: not found
    一文解决什么是Docker。如何使用Docker。Docker能做什么。
    源代码审计(白盒测试)
    vulnhub靶场之WORST WESTERN HOTEL: 1
  • 原文地址:https://blog.csdn.net/zzy734437202/article/details/134473626