java连接Mysql数据库

Java 连接 MySQL 数据库 完整教程

最新、最简洁、直接能用的 Java 连接 MySQL 方案,包含两种最常用方式:

  1. 原生 JDBC 连接(纯代码,无需框架)
  2. Druid 连接池(企业常用,性能更好)

一、准备工作

1. 导入 MySQL 驱动包(必须)

MySQL 8.0+ 使用最新驱动:

xml

复制代码
<!-- Maven 依赖,直接复制到 pom.xml -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version>
</dependency>

非 Maven 项目:手动下载 mysql-connector-j.jar 导入项目

2. 数据库信息(改成你自己的)

java

运行

复制代码
// 数据库地址(MySQL 8.0 必须加时区参数)
String url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
String username = "root";       // 你的MySQL用户名
String password = "123456";    // 你的MySQL密码

二、方式 1:原生 JDBC 连接(最基础)

完整可运行代码

java

运行

复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcTest {
    public static void main(String[] args) {
        Connection conn = null;

        try {
            // 1. 加载驱动(MySQL 8.0+ 可以省略,自动加载)
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 获取连接
            String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
            String user = "root";
            String password = "123456";

            conn = DriverManager.getConnection(url, user, password);
            System.out.println("✅ MySQL 连接成功!");

        } catch (ClassNotFoundException e) {
            System.out.println("❌ 驱动加载失败");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("❌ 数据库连接失败");
            e.printStackTrace();
        } finally {
            // 3. 关闭连接
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

三、方式 2:Druid 连接池(企业推荐)

性能更高、资源复用、防止连接泄漏

1. 先加 Druid 依赖

xml

复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.20</version>
</dependency>

2. Druid 连接代码

java

运行

复制代码
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Properties;

public class DruidTest {
    public static void main(String[] args) {
        try {
            // 配置
            Properties prop = new Properties();
            prop.setProperty("driverClassName", "com.mysql.cj.jdbc.Driver");
            prop.setProperty("url", "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC");
            prop.setProperty("username", "root");
            prop.setProperty("password", "123456");

            // 创建连接池
            DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

            // 获取连接
            Connection conn = dataSource.getConnection();
            System.out.println("✅ Druid 连接池连接成功!");

            conn.close(); // 归还连接,不是关闭

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、常见报错解决方案

  1. 时区错误 必须加参数:serverTimezone=UTC
  2. Public Key Retrieval is not allowed 加参数:allowPublicKeyRetrieval=true
  3. 连接被拒绝检查 MySQL 服务是否启动、账号密码是否正确
  4. 驱动找不到 MySQL 8.0 驱动类是:com.mysql.cj.jdbc.Driver(多了 cj)

四、JDBC 标准操作步骤(增删改查)

java

运行

复制代码
// 1. 获取连接
Connection conn = ...;

// 2. 创建执行对象
String sql = "SELECT * FROM user";
java.sql.PreparedStatement pstmt = conn.prepareStatement(sql);

// 3. 执行查询
java.sql.ResultSet rs = pstmt.executeQuery();

// 4. 处理结果
while (rs.next()) {
    System.out.println(rs.getString("name"));
}

// 5. 关闭资源
rs.close();
pstmt.close();
conn.close();

总结

  1. MySQL 8.0+ 驱动是 mysql-connector-j
  2. URL 必须带时区参数
  3. 新手用原生 JDBC ,项目用Druid 连接池
  4. 记得关闭连接避免资源泄漏
相关推荐
jnrjian1 分钟前
DRG-50857 ORA-30576 drixmd.PurgeKGL CTXSYS
数据库·oracle
蜗牛互联网4 分钟前
AI给面试打分不够,求职者更需要可核对的证据
java·人工智能·后端
此时不提桶,更待何时27 分钟前
02-05-B-虚拟线程面试与生产事故实战
java·面试
名字还没想好☜31 分钟前
Spring Boot 3.2 RestClient 实战:替代 RestTemplate 调外部接口,超时、连接池与错误处理
java·后端·spring
摇滚侠1 小时前
《Spring Boot 3:高级与架构设计》第 2 章 IOC容器的高级机制 BeanFactoryPostProcessor 个人理解 6
java·spring boot·笔记·后端
志栋智能1 小时前
集成是关键:让巡检超自动化融入现有工具链
运维·服务器·数据库·架构·自动化
IvorySQL1 小时前
PostgreSQL 日报|逻辑解码竞态条件修复(9 月 20 日)
数据库·人工智能·postgresql
程序员阿鹏1 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端
爱奥尼欧2 小时前
【MySQL】建库就是建目录?字符集校验规则、备份恢复与alter改表实操
mysql
SL_staff2 小时前
项目延期时如何用四类角色机制实现责任锚定?一线技术实践拆解
java·低代码·团队管理