JDBC在MySQL5与MySQL8之间的联系与区别

Posted sanqima

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC在MySQL5与MySQL8之间的联系与区别相关的知识,希望对你有一定的参考价值。

    JDBC 全称为Java DataBase Connectivity,意为Java数据库连接,它是Java程序访问数据库的标准接口。

1、JDBC的作用

    DBC主要是做三件事:

  1. 与数据库建立连接,充当Java App与后台数据库之间的中间桥梁,让这2者之间的数据通过JDBC来传递,同时JDBC屏蔽了不同数据库之间差异,对外提供统一的接口;
  2. 执行sql语句,对后台数据库进行增删改查;
  3. 返回sql语句的执行结果给Java App;
图(1) JDBC作为中间层

    实例化如下:

图(2) JDBC屏蔽底层数据库的差异,给上层提供统一的访问接口

2、mysql5与MySQL8数据库连接对比

2.1 相同点

图(4) JDBC数据库建立连接的流程图

    MySQL5 与MySQL8数据库建立连接的流程是一样的,都是先加载JDBC Driver,创建连接,执行sql语句,得到结果集,遍历结果集,释放资源和关闭连接,这个流程。

2.2 不同点

版本Class.forNamejar包建立SSL连接设置CST有公钥设置
MySQL5com.mysql.jdbc.Drivermysql-connector-java-5.x.x.zip
MySQL8com.mysql.cj.jdbc.Drivermysql-connector-java-8.x.x.zip

2.3 案例

    【案例需求】数据库 dbone里,有个users表,如图(4)所示,现在要查询users表里的所有用户的名称和地址。

图(4) users表

    //sql语句

select username,address from users

    代码实现
    //mysqldemo.java

package com.hua.mybatis.jdbc;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcTest {
	
	//加载驱动
	//创建链接
	//设置sql语句
	//创建Statement
	//设置参数
	//执行查询,得到ResultSet
	//遍历ResultSet,输出结果
	//释放资源
	   
    
	public static void main(String[] args) {
		// MySQL 5.0~5.7 版本 - JDBC 驱动名及数据库 URL
	    final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
	    final String DB_URL = "jdbc:mysql://localhost:3306/dbone?characterEncoding=utf-8";
	 
	    // MySQL 8.0版本 - JDBC 驱动名及数据库 URL
	    //static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
	    //static final String DB_URL = "jdbc:mysql://localhost:3306/dbone?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";

	    // 数据库的用户名与密码
	    final String USER = "root";
	    final String PASS = "xxxxxx";			
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet resultSet = null;
		
		try {
			//加载数据库驱动
			Class.forName(JDBC_DRIVER);
			conn = DriverManager.getConnection(DB_URL,USER,PASS);
			
//			//定义sql语句
			String sqlString = "select username,address from user";
			stmt = conn.createStatement();
			
			//执行sql语句
			resultSet = stmt.executeQuery(sqlString);
			
			System.out.println("user表格里的人名与地址,如下所示:");
			System.out.println("-------------------------------");
			
			//遍历查询结果集
			while(resultSet.next()) {
				String userStr = resultSet.getString("username");
				String addrStr = resultSet.getString("address");
				System.out.println(userStr+"\\t"+ addrStr);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//释放资源
			if (resultSet != null) {
				try {
					resultSet.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e2) {
					e2.printStackTrace();
				}
			}
			
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e2) {
					e2.printStackTrace();
				}
			}
		}			
	}
}

    效果如下:

JDBC MySQL官网: https://downloads.mysql.com/archives/c-j/

mysql-connector-java-5.1.49.zip

mysql-connector-java-8.0.24.zip

附录

    生成dbone数据库的sql脚本
    //dbone.sql

/*
SQLyog 企业版 - MySQL GUI v8.14 
MySQL - 5.7.33 : Database - dbone
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`dbone` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `dbone`;

/*Table structure for table `orders` */

DROP TABLE IF EXISTS `orders`;

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '下单用户id',
  `number` varchar(32) NOT NULL COMMENT '订单号',
  `createtime` datetime NOT NULL COMMENT '创建时间',
  `note` varchar(100) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `FK_orders_1` (`user_id`),
  CONSTRAINT `FK_order_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

/*Data for the table `orders` */

insert  into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,'1000010','2015-02-04 13:22:35',NULL),(4,1,'1000011','2015-02-03 13:22:41',NULL),(5,10,'1000012','2015-02-12 16:13:23',NULL);

/*Table structure for table `users` */

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

/*Data for the table `users` */

insert  into `users`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'张三',NULL,'2','ShenYang'),(10,'李四','2014-07-10','1','BeiJing'),(16,'王五',NULL,'1','ShangHai'),(22,'赵六',NULL,'1','GuangZhou'),(24,'小明',NULL,'1','ShenZhen'),(25,'小红',NULL,'1','KongMing'),(26,'大卫',NULL,NULL,'XiAn');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;


以上是关于JDBC在MySQL5与MySQL8之间的联系与区别的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot连接数据库,从MySql5.13飞跃到MySql8.0.18的坑

MySQL8 JDBC连接zeroDateTimeBehavior注意事项

数据库学习笔记第一弹——MySQL8.0和MySQL5.7的下载安装与配置(图文详解步骤2022)

数据库学习笔记第一弹——MySQL8.0和MySQL5.7的下载安装与配置(图文详解步骤2022)

mysql8.0与mysql5.7安全加密小差别

mysql报错:mysql5.7和mysql8,查询时sql关键字rank问题