Java如何连接MySQL数据库:两步打通链路

java如何连接mysql数据库,本质是通过JDBC驱动建立TCP会话并执行SQL。最直接的方式是引入mysql-connector-j依赖后用DriverManager.getConnection()拿到Connection对象,三行代码即可连通;生产环境则推荐用HikariCP或Druid连接池复用连接,避免频繁握手带来的性能损耗。MySQL8.0以上版本驱动类名为com.mysql.cj.jdbc.Driver,URL必须带serverTimezone参数,否则会报时区错误;MySQL5.x则使用com.mysql.jdbc.Driver,两套配置不兼容。你需要提前确认MySQL开启了远程访问权限、3306端口可连通、账号有对应库的权限,否则代码写对也连不上。

Java连接MySQL数据库的JDBC基础配置

在pom.xml中引入mysql-connector-j,groupId为com.mysql,artifactId为mysql-connector-j,版本号与你服务器上的MySQL大版本对齐——MySQL8.0.x用8.0.x驱动,5.7.x用5.1.x驱动,跨大版本容易出现认证插件不兼容或字符集报错。JDBC4.0之后(Java6+),驱动通过SPI机制自动注册,不需要再写Class.forName("com.mysql.cj.jdbc.Driver")这行代码,但保留这行在某些老旧容器排查问题时仍有价值。

URL格式固定为jdbc:mysql://主机:端口/数据库名?参数,账号密码作为getConnection的第二、第三个参数传入。完整调用链是:DriverManager根据URL前缀匹配到MySQL驱动,驱动与MySQL服务端完成三次握手、认证、协商字符集,最后返回一个Connection实例。这个实例后续用来创建Statement或PreparedStatement执行查询。

拿到Connection就成功了大半。

Java连接MySQL数据库的连接池方案

裸用DriverManager每次请求都会新建TCP连接,握手和认证开销在高并发下很明显。连接池在应用启动时预先创建一批Connection放在队列里,用完归还而不是关闭,HikariCP是SpringBoot2.x之后默认集成的连接池,Druid由阿里巴巴开源并内置SQL监控页面。两种方案的核心差异如下:

对比项JDBC直连HikariCP连接池Druid连接池
适用场景学习、脚本、低频任务生产Web应用、高频接口生产环境、需SQL监控
连接开销每次新建TCP加认证预创建复用预创建复用
配置复杂度中高
监控能力有限内置慢查询与SQL统计

URL里的参数直接决定连接行为。useSSL=false在MySQL8.0本地开发时建议加上,避免SSL警告;allowPublicKeyRetrieval=true配合caching_sha2_password认证插件使用;characterEncoding=utf8mb4确保emoji和生僻字不丢字;rewriteBatchedStatements=true让批量INSERT走更高效的协议。

Connection、Statement、ResultSet三个资源都要关,且必须在finally块或try-with-resources里关,否则数据库连接会被慢慢耗尽。Java7+推荐try-with-resources写法,把资源声明在try后的括号里,JVM会自动按声明逆序关闭,不需要手写finally。

常见错误是把密码里的特殊字符原样拼进URL,比如@符号会被URL解析器当作主机分隔符,导致连接串被截断报Communicationslinkfailure。密码含特殊字符时要么改密码,要么用Properties对象传参而不是拼URL字符串。

该方案的适用边界是单机MySQL或主从架构下的普通业务连接。如果你用的是MySQL8.0默认的caching_sha2_password认证插件,且驱动版本低于8.0,会直接拒绝认证,此时必须升级驱动到8.0.x,而不是改MySQL配置。对于需要读写分离、分库分表的场景,连接池本身不提供路由能力,需要额外配置ShardingSphere或MyBatis插件。

敬慕百科汇集百科知识与游戏文化,带你发现世界的每一个精彩角落。

想要了解更多关于java如何连接mysql数据库的文章欢迎访问:百科