Java:JDBC连接完整通俗易懂指南(图文表格版)

JDBC 链接,简单来说,就是Java 程序连接数据库的“地址”和“通道”

它的全称是Java Database Connectivity (Java数据库连接),是一套让 Java 代码能和不同数据库(如 MySQL、Oracle、PostgreSQL 等)对话的标准 API(应用程序编程接口),由 SUN 公司制定规范,各大数据库厂商实现底层驱动。

通俗类比:JDBC 相当于数据库通行证+通讯管道,连接字符串就是通行证密码,告诉Java程序:数据库在哪、走什么通讯规则、账号密码、附加校验规则。


1. JDBC连接核心结构(拆解+通俗注解)

以MySQL8.x标准连接地址为例:

jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8

拆分完整组成,补齐原有文档缺失的驱动协议细分规则,全部表格化:

组成部分

细分规则+含义

标准示例值

必填与否

顶层协议

固定前缀jdbc:,代表启用JDBC通讯规范,所有数据库必须保留,不可修改

jdbc:

必填

数据库子协议

区分数据库类型,驱动识别标识,mysql/oracle/postgresql各不相同

mysql://

必填

主机Host

数据库服务器IP,localhost仅代表本机;线上必须填写外网/内网IP

localhost、127.0.0.1、192.168.3.105

必填

端口Port

数据库监听端口,每个数据库默认端口固定,不可随意修改

3306(MySQL)、1521(Oracle)

必填

业务库名

连接目标业务数据库,不是MySQL服务本身,必须提前手动创建

mydb、user_db、order_db

必填

扩展连接参数

配置编码、时区、加密、超时、认证规则,多个参数使用&分隔

?serverTimezone=Asia/Shanghai

可选(生产必加)

2. 主流数据库完整对照表(补齐驱动类+maven依赖,生产可用)

原有文档缺失驱动类、适配版本、特殊语法,整合为最全对照表,区分老旧版本与新版本,规避报错:

数据库类型

JDBC连接地址

完整驱动类

默认端口

适配场景

MySQL8.x

jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true

com.mysql.cj.jdbc.Driver(新版)

3306

主流生产环境、SpringBoot2.x/3.x

MySQL5.x

jdbc:mysql://localhost:3306/mydb?useSSL=false&characterEncoding=utf-8

com.mysql.jdbc.Driver(旧版,已废弃)

3306

老旧遗留项目

Oracle

jdbc:oracle:thin:@localhost:1521:xe

oracle.jdbc.OracleDriver

1521

金融、国企老旧项目

PostgreSQL

jdbc:postgresql://localhost:5432/mydb

org.postgresql.Driver

5432

云原生、大数据项目

SQL Server

jdbc:sqlserver://localhost:1433;databaseName=mydb

com.microsoft.sqlserver.jdbc.SQLServerDriver

1433

传统Windows业务系统

SQLite

jdbc:sqlite:D:/db/mydb.db

org.sqlite.JDBC

无端口

本地轻量化单机项目

避坑关键点:MySQL8.x 禁止使用旧驱动com.mysql.jdbc.Driver,会直接启动告警、连接失败;必须带时区参数!

3. JDBC原生代码优化版(修复旧代码缺陷)

3.1 原有代码存在问题

  • 强行编写Class.forName加载驱动,JDBC4.0+完全冗余

  • 未处理SQL异常、资源关闭不严谨

  • 时区参数错误,线上时间错乱

3.2 生产级精简代码

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcProdExample { public static void main(String[] args) { // 1. 生产标准链接地址 String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&allowPublicKeyRetrieval=true"; String username = "root"; String password = "root123456"; // 2. JDBC4.0自动加载驱动,无需手动Class.forName // 3. try-with-resources自动关闭连接,杜绝连接泄露(核心优化点) try (Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT name,id FROM users")) { // 遍历查询结果 while (rs.next()) { System.out.println("用户ID:"+rs.getInt("id")+" 用户名:" + rs.getString("name")); } } catch (Exception e) { // 生产环境禁止直接打印堆栈,需要日志输出 e.printStackTrace(); } } }

4. SpringBoot全场景配置(补充多环境+废弃参数说明)

4.1 application.properties 标准生产配置

# 数据库连接地址 spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&allowPublicKeyRetrieval=true # 账号密码 spring.datasource.username=root spring.datasource.password=root123456 # MySQL8固定驱动类,禁止简写 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 开启打印sql日志(调试专用) logging.level.com.zaxxer.hikari=DEBUG

4.2 application.yml 标准生产配置

spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8 username: root password: root123456 driver-class-name: com.mysql.cj.jdbc.Driver

4.3 废弃参数补充(高频踩坑)

废弃参数

问题

替代方案

useLegacyDatetimeCode

MySQL8彻底废弃,引发时间报错

直接删除,使用serverTimezone统一时区

driverClassName=com.mysql.jdbc.Driver

过期驱动,SpringBoot3直接启动失败

替换为com.mysql.cj.jdbc.Driver

5. MySQL连接参数完整版(分类表格,区分开发/生产)

扩充原有参数,拆分必填参数、优化参数、故障修复参数,适配线上生产:

参数名称

详细作用

适用环境

serverTimezone=Asia/Shanghai

指定东八区时区,解决相差8小时、时间回显错误,生产必填

MySQL8全局

useSSL=false

关闭SSL加密连接,本地开发关闭;外网公网必须开启true

本地开发关闭,线上生产开启

characterEncoding=utf-8

统一通讯编码,解决新增、查询中文乱码

全环境必填

allowPublicKeyRetrieval=true