当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/1153930/

相关文章:

  • ADP5350与STM32F745VG电源管理方案解析
  • 3步解锁QMC加密音乐:qmc-decoder音频解密完全指南
  • MyTV-Android:15MB轻量级电视直播软件,让老旧电视重获新生
  • AI Agent工程师,凭什么薪资是传统开发的3倍?
  • 想在北京安装宽带的朋友看过来 这家本地代理商还不错
  • 一次分布式数据库连接池耗尽故障复盘:HikariCP配置不当引发的连锁雪崩
  • 抖音批量下载终极指南:免费开源工具快速下载视频和音乐
  • 从工厂到轻松职场:如何通过数据分析实现职业转型?
  • 激光位移传感器怎么调?从安装、教导到参数校准,全流程实操干货
  • 伺服行星减速机适合哪些设备?机器人、锂电与包装设备的选型分析
  • 孩子写作业总揉眼睛?换了这盏灯后我终于不焦虑了
  • Claude遭禁、马斯克600亿美金买Cursor:2026年AI编程工具格局彻底重写
  • 拼多多全站推广(商品稳定成本推广)完整详解
  • 3分钟上手MIFARE Classic Tool:安卓NFC标签管理的完整解决方案
  • 【信号处理】预测和反反馈主动噪声和振动控制算法附matlab代码
  • Beyond Compare 5终极激活方案:专业级密钥生成器深度解析
  • IIR与FIR滤波器对比:5个维度解析语音去噪场景下的选型策略
  • 微信聊天记录本地解密完整指南:5步轻松获取你的数据
  • Python量化交易终极指南:用MOOTDX轻松获取A股市场数据
  • 采购管理系统选型指南:2026年7款主流方案横向对比
  • Caddy:默认自动 HTTPS 的 Web 服务器
  • MetaTube插件:3步实现Jellyfin媒体库元数据自动刮削,告别杂乱无章的影片管理
  • QMC音频解密工具:释放你被锁定的音乐文件
  • 工业负载控制:TPD2015FN与TM4C129ENCZAD集成方案
  • Steam成就管理器:一站式成就管理与数据编辑解决方案
  • OpenCore Legacy Patcher技术深度解析:为老旧Mac注入新生命的技术革命
  • Mermaid实时编辑器:用代码思维重构技术图表创作流程
  • 考研408《操作系统》复习笔记,第四章《4.3 文件系统层次结构、布局、虚拟文件系统》
  • 36W SiC 适配器实测:CX7172D+CX75TS10A 方案 效率 91.39% 待机 33mW EMI 余量 6~8dB
  • html静态网页模板 网页模板下载