JDBC 全称为Java DataBase Connectivity,意为Java数据库连接,它是Java程序访问数据库的标准接口。
1、JDBC的作用
DBC主要是做三件事:
- 与数据库建立连接,充当Java App与后台数据库之间的中间桥梁,让这2者之间的数据通过JDBC来传递,同时JDBC屏蔽了不同数据库之间差异,对外提供统一的接口;
- 执行sql语句,对后台数据库进行增删改查;
- 返回sql语句的执行结果给Java App;
实例化如下:
2、MySQL5与MySQL8数据库连接对比
2.1 相同点
MySQL5 与MySQL8数据库建立连接的流程是一样的,都是先加载JDBC Driver,创建连接,执行sql语句,得到结果集,遍历结果集,释放资源和关闭连接,这个流程。
2.2 不同点
版本 | Class.forName | jar包 | 建立SSL连接 | 设置CST | 有公钥设置 |
---|---|---|---|---|---|
MySQL5 | com.mysql.jdbc.Driver | mysql-connector-java-5.x.x.zip | 否 | 否 | 否 |
MySQL8 | com.mysql.cj.jdbc.Driver | mysql-connector-java-8.x.x.zip | 是 | 是 | 是 |
2.3 案例
【案例需求】数据库 dbone里,有个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 */;