核心原理
Java 本身不直接操作数据库,而是通过一个叫做 JDBC (Java Database Connectivity) 的 API 来与数据库进行交互,要连接 MySQL,你需要使用 MySQL 提供的 JDBC 驱动程序。

整个过程可以分解为以下几个步骤:
- 加载 JDBC 驱动:告诉 JVM 我们要使用哪个数据库的驱动。
- 获取数据库连接:使用
DriverManager类建立与 MySQL 服务器的连接。关键点:此时我们连接的不是某个具体的数据库,而是 MySQL 服务器本身,URL 中通常不包含数据库名称,并且需要提供有创建数据库权限的用户名和密码。 - 创建
Statement对象:通过连接对象创建一个Statement,用于执行 SQL 命令。 - 执行 SQL 语句:使用
Statement的executeUpdate()方法来执行CREATE DATABASESQL 命令。 - 处理结果和关闭资源:检查执行是否成功,并按照“后开先关”的原则关闭所有资源(
Statement,Connection)。
步骤 1:准备工作
在编写代码之前,请确保你已经完成了以下准备工作:
- 安装 MySQL Server:确保你的计算机上已经安装并运行了 MySQL 服务器。
- 获取 MySQL JDBC 驱动:
- 推荐方式 (Maven):如果你使用 Maven 项目,只需在
pom.xml文件中添加依赖即可,这是最简单、最推荐的方式。 - 手动下载:你也可以从 MySQL 官网 下载 JDBC 驱动(通常是
.jar文件),并将其添加到你的项目的类路径中。
- 推荐方式 (Maven):如果你使用 Maven 项目,只需在
Maven 依赖 (pom.xml)
打开你的 pom.xml 文件,添加以下依赖:
<dependencies>
<!-- MySQL Connector/J -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version> <!-- 建议使用最新稳定版 -->
</dependency>
</dependencies>
步骤 2:编写 Java 代码
下面是一个完整的 Java 示例,展示了如何创建一个名为 my_new_database 的数据库。

示例代码 1:基础版
这个版本最直接,易于理解。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateDatabaseExample {
// 数据库连接信息(注意:这里没有数据库名)
// 请根据你的实际情况修改 host, port, user, password
private static final String DB_URL = "jdbc:mysql://localhost:3306/";
private static final String USER = "root";
private static final String PASS = "your_password";
public static void main(String[] args) {
// 使用 try-with-resources 语句,自动关闭资源
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement()) {
// --- 执行创建数据库的 SQL 语句 ---
// IF NOT EXISTS 是一个好习惯,可以避免如果数据库已存在时抛出错误
String sql = "CREATE DATABASE IF NOT EXISTS my_new_database";
int result = stmt.executeUpdate(sql);
if (result == 1) {
System.out.println("数据库 'my_new_database' 创建成功!");
} else {
System.out.println("数据库 'my_new_database' 已存在或创建失败。");
}
} catch (SQLException e) {
// 打印详细的错误信息
System.err.println("创建数据库时出错: " + e.getMessage());
e.printStackTrace();
}
}
}
代码解析
DB_URL:jdbc:mysql://localhost:3306/jdbc:mysql://: 协议和子协议,表示使用 MySQL 的 JDBC 连接。localhost: MySQL 服务器的主机名,如果是远程服务器,请替换为 IP 地址或域名。3306: MySQL 服务器的端口号,默认是 3306,如果不是默认端口,请修改。- 最后有一个 :这表示我们连接的是 MySQL 服务器的“根”或“默认”上下文,而不是某个特定的数据库。
USER和PASS: 连接 MySQL 服务器的用户名和密码,这个用户必须拥有CREATE权限。try-with-resources: 这是 Java 7+ 引入的一个语法糖,它会自动在try代码块执行完毕后关闭Connection和Statement对象,即使发生了异常,这极大地简化了资源管理,避免了资源泄漏。conn.createStatement(): 创建一个Statement对象,用于发送 SQL 语句到数据库。stmt.executeUpdate(sql):executeUpdate()用于执行会改变数据库状态的 SQL 语句,如INSERT,UPDATE,DELETE,CREATE,DROP等。- 它返回一个整数,表示受影响的行数,对于
CREATE DATABASE语句,如果成功创建,通常会返回1;如果数据库已存在且使用了IF NOT EXISTS,则可能返回0。
catch (SQLException e): 捕获并处理所有 SQL 相关的异常,例如连接失败、SQL 语法错误、权限不足等。
步骤 3:进阶与最佳实践
在实际项目中,我们通常会将数据库连接信息配置在外部文件中(如 config.properties),并使用连接池来管理数据库连接。
示例代码 2:使用配置文件和连接池 (Druid)
添加 Druid 连接池依赖 (pom.xml)
<dependencies>
<!-- MySQL Connector/J -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
<!-- Druid 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.18</version> <!-- 建议使用最新版 -->
</dependency>
</dependencies>
创建配置文件 (src/main/resources/config.properties)
# MySQL 服务器连接信息 db.url=jdbc:mysql://localhost:3306/ db.username=root db.password=your_password
修改 Java 代码
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Properties;
public class CreateDatabaseWithDruid {
public static void main(String[] args) {
// 1. 从配置文件加载数据源配置
Properties props = new Properties();
try (InputStream input = CreateDatabaseWithDruid.class.getClassLoader().getResourceAsStream("config.properties")) {
props.load(input);
} catch (Exception e) {
System.err.println("无法加载配置文件: " + e.getMessage());
return;
}
// 2. 创建 DruidDataSource 数据源
DruidDataSource dataSource = null;
try {
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(props);
} catch (Exception e) {
System.err.println("创建数据源失败: " + e.getMessage());
return;
}
// 3. 从数据源获取连接
try (Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement()) {
String sql = "CREATE DATABASE IF NOT EXISTS my_advanced_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
stmt.executeUpdate(sql);
System.out.println("数据库 'my_advanced_database' 创建成功!");
} catch (SQLException e) {
System.err.println("创建数据库时出错: " + e.getMessage());
e.printStackTrace();
} finally {
// 4. 关闭数据源(在应用关闭时执行)
if (dataSource != null) {
dataSource.close();
}
}
}
}
进阶代码解析
- 配置文件:将硬编码的连接信息移到
config.properties文件中,提高了代码的可维护性。 - 连接池 (Druid):
DruidDataSource是一个高性能的数据库连接池。- 它通过管理一组预先创建好的连接来复用连接,避免了频繁创建和销毁连接带来的性能开销。
- 获取连接时,我们调用
dataSource.getConnection(),而不是DriverManager.getConnection()。
CHARACTER SET utf8mb4: 这是一个非常重要的最佳实践。utf8mb4是utf8的超集,能够支持更广泛的字符,包括 Emoji 表情和一些特殊的字符,可以有效避免乱码问题。
常见问题与解决方案
-
com.mysql.cj.jdbc.Driveris not available- 原因:这是旧版驱动(
com.mysql.jdbc.Driver)的报错,新版驱动(mysql-connector-j)的类名已经改变。 - 解决方案:确保你的
pom.xml中使用的是com.mysql:mysql-connector-j,并且版本不要太旧(推荐 8.x)。从 JDBC 4.0 (Java 6+) 开始,加载驱动的步骤是可选的,驱动会自动注册。
- 原因:这是旧版驱动(
-
Access denied for user 'root'@'localhost' (using password: YES)
- 原因:用户名或密码错误,或者该用户没有创建数据库的权限。
- 解决方案:
- 检查
config.properties或代码中的用户名和密码是否正确。 - 登录 MySQL (
mysql -u root -p),检查用户权限:SHOW GRANTS FOR 'root'@'localhost';
确保结果中包含
GRANT ALL PRIVILEGES ON *.* ...或至少GRANT CREATE ON *.* ...。
- 检查
-
Unknown database 'mysql' (or other database)
- 原因:你的
DB_URL错误地包含了一个不存在的数据库名,创建数据库时,URL 应该指向服务器根目录,即以 - 解决方案:检查你的
DB_URL,确保它看起来像jdbc:mysql://localhost:3306/,而不是jdbc:mysql://localhost:3306/some_db。
- 原因:你的
-
No suitable driver found for jdbc:mysql://...
- 原因:JDBC 驱动程序没有被正确加载或添加到项目的类路径中。
- 解决方案:
- 如果你使用 Maven,确保
pom.xml依赖已正确下载并刷新项目。 - 如果你手动添加了
.jar文件,确保它被包含在项目的构建路径中。
- 如果你使用 Maven,确保
希望这份详细的指南能帮助你成功地在 Java 中创建 MySQL 数据库!
