MySQL 5.7 进阶之路 · 从手撕 JDBC 到提桶跑路篇 · 卷 · Ⅰ( JDBC 连接 MySQL )
前言(碎碎念):
JDBC:Java DataBase Connectivity,是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,一种使用 Java 进行数据库连接的技术。在之前的介绍中,我们用的图形化工具 —— SQLyog 来操作 MySQL 数据库,本文档只是换成了JAVA 而已,如下图所示。( ?? ω ?? )?
小提示:未安装 MySQL 的读者请参考另一篇文档,传送门:
Ⅰ、JDBC 编程的简单介绍
JDBC API :java.sql.* —— 简单介绍:
需要一个相应数据库的驱动 jar 包【 初学者只需关注这一行 】
java.sql.* 下规定了标准接口,而 MySQL 驱动里则是各个接口的实现
MySQL 驱动的内部封装了与服务器的交互协议
Class.forName("com.mysql.jdbc.Driver"),这一行代码用于显式注册 MySQL 驱动,但可以省略,后面会有专门讲解( 不是重点 )
1. MySQL 官方提供了我们所需的 jar 包,由于 MySQL 已被 Oracle 公司收购,自 5.7 以后的版本不再免费,故本文档以 5.1.49 版本演示【 注意!若读者使用 5.1.49 以前的版本也可】
读者请参考下图操作,传送门:https://downloads.mysql.com/archives/c-j/
2. 将下载完后的压缩文件解压,本文档只需要用到 " mysql-connector-java-5.1.49-bin.jar " 文件【 其它版本类似 】
Ⅱ、设置 MySQL 数据库,以 SQLyog 操作
1. 在 SQLyog 中我们准备好了一个名为 " se_21_students " 的数据库,其下有一张名为 " se_21_01_students " 的表,里面暂时存放着一些数据用于后续测试
注意!
本文档在此教程中仅演示如何用 JAVA 的 JDBC 连接到 MySQL 5.7 系列
以下的名称并非不可改,读者可自行更改文件名,无需与本文档一致
2. 读者也可以直接在 SQLyog 中的查询编辑器中执行以下代码【初学者仅需创建一个数据库即可】
注意!有其它需求的读者只需根据本文档稍加改动几个参数,以此类推即可
CREATE DATABASE `se_21_students`;
USE `se_21_students`;
DROP TABLE IF EXISTS `se_21_01_student`;
CREATE TABLE `se_21_01_student` (
`id` int(11) NOT NULL COMMENT '学号',
`name` varchar(32) DEFAULT NULL COMMENT '姓名',
`sex` varchar(16) DEFAULT NULL COMMENT '性别',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`phoneNumber` varchar(32) DEFAULT NULL COMMENT '电话号码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `se_21_01_student`(`id`,`name`,`sex`,`birthday`,`phoneNumber`) values
(210001,'北圳南','男','2000-02-10','15600010002'),
(210002,'聆牧笛','男','1999-03-16','15663333333'),
(210003,'晓风残','男','1999-05-01','16522222222'),
(210004,'顾青青','女','2003-02-25','18202030200');
Ⅲ、JDBC 编程,以 Eclipse IDE 演示【注:Eclipse EE IDE 与其操作一致】
1. 打开 Eclipse 后,本文档依次创建了:MyTest 文件夹 >>> TestMySQL 包 >>> test01.java 文件。
注意:以上文件名称并非不可改,读者可自行更改文件名,无需与本文档一致
2. 选中 MyTest 文件夹【重点是选中文件夹创建!】,点击右键,依次选择:New >>> Folder
3. 在弹出的 " New Folder " 界面中按下图操作
4. 将之前下载好的 " mysql-connector-java-5.1.49-bin.jar " 文件【 其它版本类似 】粘贴到 " lib " 文件夹中,之后选中该文件,点击右键,依次选择:Build Path >>> Add to Build Path 即可
5. 如出现 " Referenced Libraries " 文件夹,其下有刚刚加载的文件,即为加载成功
注意:有时候 Eclipse 并不会及时更新左侧界面,读者需要按 F5 键刷新
6. 打开 test01.java 界面,代码如下【读者需要注意:文件名,数据库密码,数据库名称】
注意:不同的数据库服务器 ( Oracle, MySQL , SQLServer) 的 Connection URL的格式是不同的
jdbc:mysql:// 表明连接的是MySQL服务器
127.0.0.1:3306 是服务器的IP和端口
se_21_students 是数据库名字
useUnicode和characterEncoding 参数用于指定交互传输用的字符编码
package TestMySQL;
import java.sql.Connection;
import java.sql.DriverManager;
public class test01
{
public static void testConnect() throws Exception
{
// 注册 MySQL 驱动 ( 小提示:避免出现一些奇怪的 bug , 加上为妙 )
// 将来有些运行环境下不支持驱动的自动加载,例如,Java Web 的环境里, 所以统一加上这句
Class.forName("com.mysql.jdbc.Driver");
// 连接MySQL服务器
String username = "root";
// 此为本文档的数据库密码,读者需自行确认!!!
String password = "a1b2c3";
// se_21_students 为本文档测试连接的数据库,读者需自行确认或更改!!!
String connectionUrl = "jdbc:mysql://127.0.0.1:3306/se_21_students?useUnicode=true&characterEncoding=UTF-8";
Connection conn = DriverManager.getConnection(connectionUrl, username, password);
// 注意:此语句为测试语句,实际项目中请注释
System.out.println("连接成功!");
conn.close();//关闭连接
// 注意:此语句为测试语句,实际项目中请注释
System.out.println("关闭连接!");
}
// 以下主函数代码仅为方便演示所用,实际连接 MySQL 的代码为 testConnect() 方法
public static void main(String args[])
{
try
{
testConnect();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
7. 运行之后,正确结果应如下图所示
Ⅳ、补充说明
1. 错误 Access denied for user …
解决方法:
1.1 先用SQLyog 验证一下,看能不能连接服务器,如果SQLyog都连不上,说明服务器或网络有问题
1.2 一般来说,最可能的原因是密码错误
1.3 更改 MySQL 数据库密码,传送门:
2. 错误 Unknown database ···
解决方法:这种情况一般是数据库名称错误,读者自行检查即可
3. 为什么 Class.forName("com.mysql.jdbc.Driver") 这一句可以省略?
答:在早期的JAVA里,是需要加一行的, 在com.mysql.jdbc.Driver这个类有一个静态代码块,类似如下的代码
static
{
try
{
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E)
{
throw new RuntimeException("Can't register driver!");
}
}
所以,当 Class.forName() 执行时会执行这几行 static 代码,从而把这个 Driver 注册给 DriverManager。
不过,大概从 JDK 1.6之后,就另出一个 ServiceProvider 机制,自动地从 META-INF/service/ 目录下提取了,在 mysql-connector-jar-5.1.49-bin.jar 里,可以看到有这个文件,所以会被ServiceProvider 框架自动发现、并自动注册到 DriverManager 里。