MySQL 5.7 进阶之路 · 从手撕 JDBC 到提桶跑路篇 · 卷 · Ⅰ( JDBC 连接 MySQL )

 

前言(碎碎念):

 

  JDBC:Java DataBase Connectivity,是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,一种使用 Java 进行数据库连接的技术。在之前的介绍中,我们用的图形化工具 —— SQLyog 来操作 MySQL 数据库,本文档只是换成了JAVA 而已,如下图所示。( •̀ ω •́ )✧

  小提示:未安装 MySQL 的读者请参考另一篇文档,传送门:https://www.cnblogs.com/Maackia/p/15860600.html

 

 

 


 

 

Ⅰ、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 数据库密码,传送门:https://www.cnblogs.com/Maackia/p/15999346.html

 

 

    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 里。

 

 

posted @ 2022-03-14 17:39  北圳南  阅读(125)  评论(0编辑  收藏  举报