Java执行SQL脚本

在Java开发中,我们经常需要执行SQL脚本来操作数据库。SQL脚本通常包含一系列的SQL语句,用于创建表、插入数据、更新数据等操作。本文将介绍如何使用Java来执行SQL脚本,并提供相应的代码示例。

1. 使用JDBC连接数据库

首先,我们需要使用Java的JDBC(Java Database Connectivity)来连接数据库。JDBC是Java提供的一种用于访问数据库的标准API,通过它我们可以与各种不同的数据库进行交互。

在使用JDBC之前,我们需要下载并导入相应的JDBC驱动。不同的数据库有不同的JDBC驱动,例如MySQL的JDBC驱动是"mysql-connector-java",Oracle的JDBC驱动是"ojdbc8"等。

在代码中,我们需要引入相应的JDBC驱动并注册驱动程序。以MySQL为例,代码如下所示:

import java.sql.*;

public class Main {
    public static void main(String[] args) {
        try {
            // 加载MySQL的JDBC驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 注册驱动程序
            DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());

            // 获取数据库连接
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");

            // 执行SQL语句...
            
            // 关闭数据库连接
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用了Class.forName方法来加载MySQL的JDBC驱动,然后使用DriverManager.registerDriver方法注册驱动程序。

接着,我们使用DriverManager.getConnection方法来获取与数据库的连接。这里的参数分别是数据库的URL、用户名和密码。请根据实际情况修改这些参数。

最后,我们可以在获取连接之后执行SQL语句,并在完成后关闭数据库连接。

2. 执行SQL脚本

有了数据库连接之后,我们就可以执行SQL脚本了。通常情况下,我们可以将SQL脚本存储在一个文件中,然后使用Java的IO操作将文件内容读取出来。

以下是一个简单的示例,假设我们有一个名为"script.sql"的SQL脚本文件,其中包含了一些创建表和插入数据的SQL语句:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    email VARCHAR(100)
);

INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
INSERT INTO users (name, email) VALUES ('Jane Smith', 'jane@example.com');

现在我们要使用Java来执行这个SQL脚本,可以通过以下代码实现:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;

public class Main {
    public static void main(String[] args) {
        try {
            // 加载MySQL的JDBC驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 注册驱动程序
            DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());

            // 获取数据库连接
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");

            // 读取SQL脚本文件
            String script = readFile("script.sql");

            // 执行SQL脚本
            executeScript(connection, script);

            // 关闭数据库连接
            connection.close();
        } catch (ClassNotFoundException | SQLException | IOException e) {
            e.printStackTrace();
        }
    }

    private static String readFile(String filepath) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new FileReader(filepath));
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line);
            sb.append("\n");
        }
        br.close();
        return sb.toString();
    }

    private static void executeScript(Connection connection, String script) throws SQLException {
        Statement statement = connection.createStatement();
        String[] sqlCommands = script.split(";");
        for (String sqlCommand : sqlCommands) {
            if (!sqlCommand.trim().isEmpty()) {
                statement.executeUpdate(sqlCommand);
            }
        }
        statement.close();
    }
}

在上述代码中,我们首先定义了一个readFile方法,用于读取SQL脚本文件的内容并返回为一个字符串。这里我们使用了Java的BufferedReader来逐行读取文件内容。

然后,我们定义了一个`execute