杰瑞科技汇

Java如何用MySQL创建数据库?

核心原理

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

Java如何用MySQL创建数据库?-图1
(图片来源网络,侵删)

整个过程可以分解为以下几个步骤:

  1. 加载 JDBC 驱动:告诉 JVM 我们要使用哪个数据库的驱动。
  2. 获取数据库连接:使用 DriverManager 类建立与 MySQL 服务器的连接。关键点:此时我们连接的不是某个具体的数据库,而是 MySQL 服务器本身,URL 中通常不包含数据库名称,并且需要提供有创建数据库权限的用户名和密码。
  3. 创建 Statement 对象:通过连接对象创建一个 Statement,用于执行 SQL 命令。
  4. 执行 SQL 语句:使用 StatementexecuteUpdate() 方法来执行 CREATE DATABASE SQL 命令。
  5. 处理结果和关闭资源:检查执行是否成功,并按照“后开先关”的原则关闭所有资源(Statement, Connection)。

步骤 1:准备工作

在编写代码之前,请确保你已经完成了以下准备工作:

  1. 安装 MySQL Server:确保你的计算机上已经安装并运行了 MySQL 服务器。
  2. 获取 MySQL JDBC 驱动
    • 推荐方式 (Maven):如果你使用 Maven 项目,只需在 pom.xml 文件中添加依赖即可,这是最简单、最推荐的方式。
    • 手动下载:你也可以从 MySQL 官网 下载 JDBC 驱动(通常是 .jar 文件),并将其添加到你的项目的类路径中。

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 的数据库。

Java如何用MySQL创建数据库?-图2
(图片来源网络,侵删)

示例代码 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 服务器的“根”或“默认”上下文,而不是某个特定的数据库。
  • USERPASS: 连接 MySQL 服务器的用户名和密码,这个用户必须拥有 CREATE 权限。
  • try-with-resources: 这是 Java 7+ 引入的一个语法糖,它会自动在 try 代码块执行完毕后关闭 ConnectionStatement 对象,即使发生了异常,这极大地简化了资源管理,避免了资源泄漏。
  • 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: 这是一个非常重要的最佳实践。utf8mb4utf8 的超集,能够支持更广泛的字符,包括 Emoji 表情和一些特殊的字符,可以有效避免乱码问题。

常见问题与解决方案

  1. com.mysql.cj.jdbc.Driver is not available

    • 原因:这是旧版驱动(com.mysql.jdbc.Driver)的报错,新版驱动(mysql-connector-j)的类名已经改变。
    • 解决方案:确保你的 pom.xml 中使用的是 com.mysql:mysql-connector-j,并且版本不要太旧(推荐 8.x)。从 JDBC 4.0 (Java 6+) 开始,加载驱动的步骤是可选的,驱动会自动注册。
  2. Access denied for user 'root'@'localhost' (using password: YES)

    • 原因:用户名或密码错误,或者该用户没有创建数据库的权限。
    • 解决方案
      1. 检查 config.properties 或代码中的用户名和密码是否正确。
      2. 登录 MySQL (mysql -u root -p),检查用户权限:
        SHOW GRANTS FOR 'root'@'localhost';

        确保结果中包含 GRANT ALL PRIVILEGES ON *.* ... 或至少 GRANT CREATE ON *.* ...

  3. Unknown database 'mysql' (or other database)

    • 原因:你的 DB_URL 错误地包含了一个不存在的数据库名,创建数据库时,URL 应该指向服务器根目录,即以
    • 解决方案:检查你的 DB_URL,确保它看起来像 jdbc:mysql://localhost:3306/,而不是 jdbc:mysql://localhost:3306/some_db
  4. No suitable driver found for jdbc:mysql://...

    • 原因:JDBC 驱动程序没有被正确加载或添加到项目的类路径中。
    • 解决方案
      1. 如果你使用 Maven,确保 pom.xml 依赖已正确下载并刷新项目。
      2. 如果你手动添加了 .jar 文件,确保它被包含在项目的构建路径中。

希望这份详细的指南能帮助你成功地在 Java 中创建 MySQL 数据库!

分享:
扫描分享到社交APP
上一篇
下一篇