您现在的位置是:网站首页> 编程资料编程资料

MySQL数据库 JDBC 编程(Java 连接 MySQL)_Mysql_

2023-05-26 347人已围观

简介 MySQL数据库 JDBC 编程(Java 连接 MySQL)_Mysql_

1. 数据库编程的基础条件

如果你想实现代码操作数据库,那么以下条件是你实现它的前提

编程语言:

例如 Java、C++、Python 等等,这些语言都能够实现操作数据库

某个数据库的操作:

例如我在前面章节就介绍了关于 MySQL 的操作,实现其它数据库如 Oracle、SQL Server 等等也要学会对应数据库的一些操作

安装数据库驱动包:

不同的数据库对应不同的编程语言提供了不同的数据库驱动包,这些驱动包内实现了操作对应数据库的 API

2. Java 的数据库编程:JDBC

由于不同数据库的厂商实现数据库的 API 其实是不太一样的,因此很多语言就把这些数据库的 API 进行再一次的封装,封装出了一套统一的 API。这样就可以通过一套代码来操作多个不同的数据库了

在 Java 中,这样的封装就是由 Java 标准库来完成的,封装出了一套统一的数据库 API 称为 JDBC

拓展:

Java 本身是跨平台语言,虽然不同操作系统提供了不同的 API,但是 Java 本身也把这些 API 封装了起来,在标准库中提供了统一的接口,因此 Java 就可以一次编译,到处运行

JDBC 介绍:

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

注意:

  • JDBC API 是 Java 标准库自带的,可以直接用,但是 MySQL 的 JDBC 驱动不是系统自带的,因此需要额外进行下载安装
  • MySQL 的 JDBC 驱动其实就是对 JDBC API 里面一些类和接口的具体实现

3. JDBC 访问数据库的层次结构

4. MySQL 数据库操作介绍

在前面章节我就介绍了关于 MySQL 的一些知识了,如果你在这方面有漏洞的话,可以直接通过下面的文章来进行补充。

第一章链接: 【MySQL 数据库】数据库的基础知识

第二章链接: 【MySQL 数据库】MySQL 的对库的操作及其数据类型

第三章链接: 【MySQL 数据库】数据表的基本操作

第四章链接: 【MySQL 数据库】数据库的约束及数据表的设计原理

第五章链接: 【MySQL 数据库】聚合查询和联合查询操作

第六章链接: 【MySQL 数据库】MySQL 的索引和事务

5. MySQL 驱动包的下载及添加到项目

由于 MySQL 的 JDBC 驱动不是系统自带的,因此需要额外进行下载安装

各大数据库的官网就有对应数据库的 JDBC 驱动,但这里我推荐使用一些中央仓库来进行下载,例如 mvnrepository

驱动包下载步骤:

进入 mvnrepository 网站,在搜索栏搜索 MySQL,就可以查询到以下结果

选择第一个 MySQL Connector/J,就可以跳转到下载版本选择的页面

选择好自己对应的数据库版本的驱动(大版本一定要对应,小版本区别不大可以随意选),由于我自己是 5.x 系列的MySQL,因此,我选择大版号是5的就行。选择后就跳到了最终下载的页面

点击 jar 就开始下载了(这个 jar 包就是将这个驱动包中的一些 .class 文件以压缩包的形式进行打包了)

下载完成后,这个驱动包就已经下载到你本地了,只再将它引入到你的项目就可以是用

6. JDBC 使用步骤

6.1 创建数据库源,连接 Connection

创建一个数据库源:

 DataSource dataSource=new MysqlDataSource(); // DataSource 是来自于 Java 标准库的一个接口,它用来表示“数据库在哪” // MysqlDataSource 是来自于 MySQL 的驱动包,它是实现了 DataSource 接口的类 

数据库就是一个服务器程序,可以通过 DataSource 来描述服务器的 地址、端口、用户名、密码、要访问的数据库名等

把数据库的位置信息,设置到 DataSource

 // 1)通过一个 URL 来表示连接的数据库、数据库的 ip、端口、数据库名、编码方式、是否加密 ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&setSSL=false"); // 2)设置登录数据库的用户名 ((MysqlDataSource)dataSource).setUser("root"); // 3)设置登录数据库的密码 ((MysqlDataSource)dataSource).setPassword("1234"); 

由于 setURLsetUsersetPassword 都是 MysqlDataSource 实现的,所以使用时需要向下转型
上述 URL 是一种固定的写法,例如:jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&setSSL=false

  • jdbc 表示使用 JDBC 访问数据库
  • mysql 表示访问的数据库是 MySQL
  • 172.0.0.1 是 IP 地址,IP 地址是用来区分是哪个主机,172.0.0.1 这个 IP 地址表示当前使用的主机自身,因为我的 MySQL 服务器也装在自己电脑上,自行修改
  • 3306 是端口号,这是安装数据库服务器时手动设置的,一般默认是3306,它是用来区分主机上的某个程序
  • test 是要访问的数据库名,这是我数据库里面的,自行修改
  • characterEncoding=utf8 是用来指定编码方式的,此处是使用 utf8,需要和使用的数据库便方式对应,自行修改
  • useSSL=false 是用来表示是否加密的,此处表示不加密,自行修改

连接数据库,进行真正的网络通信:

 Connection connection=dataSource.getConnection(); 

Connection 是 Java 标准库里的,虽然 MySQL 驱动里面也有。它是用来进行和数据库服务器进行网络连接的
getConnection 用于获得试图建立到指定数据库 URL 的连接,如果连接成功就返回一个 Connection 对象,如果失败就抛出异常
由于 getConnection 可能会连接失败(例如 IP 地址、端口等输入错误),因此就需要在方法声明时通过 throws 给上层调用者抛出异常或者使用 try-catch 去处理异常

6.2 构造 SQL 语句,为执行的操作做准备

通过字符串,构造一个要执行的 sql

 // 例如要执行新增元素操作(表名为 student,有两列 id 和 student Scanner scanner=new Scanner(System.in); System.out.print("请输入 id:"); int id=scanner.nextInt(); System.out.print("请输入 姓名:"); String name=scanner.next(); String sql="insert into student values(?,?)"; 
  1. sql 就是构造的 SQL 语句,里面就是要执行的具体操作
  2. sql 语句中可以不用加分号
  3. 表示通配符,可以通过它对 sql 语句里的内容进行动态替换,需要替换的内容用 ?代替,后续再使用 PreparedStatement 对象的一些方法将其再替换成具体要更改的值

例如:

void setInt(int paramenterIndex, int x) :paramenterIndex 表示 sql 语句中要替换通配符的具体位置(从1开始),x 表示要替换掉具体值
void setString(int parameterIndex, String x) :paramenterIndex 表示 sql 语句中要替换通配符的具体位置(从1开始),x 表示要替换掉具体值
通过 prepareStatement(sql) 方法,将构造的字符串 sql 转化成真正的数据库底层的 SQL 语句

 PreparedStatement statement=connection.prepareStatement(sql); // 通过 setInt 方法,将 SQL 语句中的第一处通配符进行具体值的替换 statement.setInt(1,id); // 通过 setString 方法,将 SQL 语句中的第二处通配符进行具体值的替换 statement.setString(2,name); 

JDBC 中,使用 Connection 和数据库建立了连接对象 connection,那么 connection 就可以调用 prepareStatement(String sql) 方法对参数 sql 指定的 SQL 语句进行编译预处理,生成该数据库底层的内部命令,并将该命令封装在 PreparedStatement 对象中

6.3 执行 SQL,并处理结果集

通过 PreparedStatement 对象的 executeQuery 或者 executeUpdate 方法来执行 SQL

如果是执行内容变更的操作(增加、修改、删除),就使用 int executeUpdate() 方法

 int ret=statement.executeUpdate(); // executeUpdate 的返回结果是执行该操作后影响的行数 // 可以通过打印返回值来显示影响的行数 System.out.println("ret: "+ret); 

如果要是要执行查询操作,就使用 ResultSet executeQuery() 方法

 ResultSet resultSet=statement.executeQuery(); // executeQuery 的返回结果是执行该操作后查询到的类似于临时表的结构,存放在 ResultSet 对象中 // 接下来我们可以对它进行遍历,类似于迭代器的遍历,方法如下 while(resultSet.next()){ // 假设有两列 id 和 name int id=resultSet.getInt(id); String name=resultSet.getString(name); System.out.println("id="+id+", name="+name); } 

SQL 查询语句对数据库的查询操作将返回一个 ResultSet 对象,ResultSet 对象由按列(字段)组织的数据行构成
ResultSet 对象一次只能看到一行数据,使用 next() 方法,可以移到下一个数据行(类似于 i++)
可以使用 ResultSet 对象的 getXxx() 方法,去获得字段。常用方法后面讲将介绍

6.4 释放资源

当我们执行完了我们的 SQL 语句后,如果不再使用某些对象,就需要把连接关闭,释放掉对应的资源

 // 如果有 ResultSet 对象不需要使用后,需要关闭这个连接 resultSet.close(); // Connection 不需要使用后,需要关闭这个连接 connection.close(); // PreparedStatement 不需要使用后,需要关闭这个连接 statement.close(); 

ResultSetConnectionPreparedStatement 这些对象都对应着一些及机器的硬件资源,如果不使用的话就要及时还回去。就类似于借书,如果大家在图书馆只借书,不还书,那么图书馆的书籍资源就会一直减少
这些对象可以使用 close() 方法,来关闭和客户端与服务器建立的连接,以此释放占用的资源

6.5 JDBC 编程模板

通过上面五步,就可以进行基础的 Java 的 JDBC 编程了,虽然方法不止这一种,但如果你还不会的话,掌握这个方法就行了。最后再总结下整个的模板,依据它,我们就可以用 Java 语言对 MySQL 数据库进行各种操作

 public static void test(){ // 1. 创建数据库源,连接 Connection DataSource dataSource=new MysqlDataSource(); ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false"); ((MysqlDataSource)dataSource).setUser("root"); ((MysqlDataSource)dataSource).setPassword("1234"); Connection con
                
                

-六神源码网