在 Java 中调用 SQL 脚本的方式有多种, 在这里只记录一种自己常用的方式, 个人觉得挺实用方便的.
运用 ScriptRunner 这个类.
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.jdbc.ScriptRunner;
- import java.io.IOException;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.util.Properties;
- /**
- * 运行 Sql 脚本
- * sql 脚本放在 resources 下的 sql 文件夹下
- */
- public final class RunSqlScript {
- /**
- * <p> 运行指定的 sql 脚本
- * @param sqlFileName 需要执行的 sql 脚本的名字
- */
- public static void run(String sqlFileName) {
- try {
- // 获取数据库相关配置信息
- Properties props = Resources.getResourceAsProperties("db.properties");
- // jdbc 连接信息: 注: 现在版本的 JDBC 不需要配置 driver, 因为不需要 Class.forName 手动加载驱动
- String url = props.getProperty("jdbc.url");
- String username = props.getProperty("jdbc.username");
- String password = props.getProperty("jdbc.password");
- // 建立连接
- Connection conn = DriverManager.getConnection(url, username, password);
- // 创建 ScriptRunner, 用于执行 SQL 脚本
- ScriptRunner runner = new ScriptRunner(conn);
- runner.setErrorLogWriter(null);
- runner.setLogWriter(null);
- // 执行 SQL 脚本
- runner.runScript(Resources.getResourceAsReader("sql/" + sqlFileName + ".sql"));
- // 关闭连接
- conn.close();
- // 若成功, 打印提示信息
- System.out.println("====== SUCCESS ======");
- } catch (IOException | SQLException e) {
- e.printStackTrace();
- }
- }
- }
ps 下: 在现在版本的 JDBC 驱动中, 已经不需要像以前一样加载 driver 和手动 class.forName(driver) 来加载驱动了, 详情可以自行点进 DriverManager 中看, 有一个 static {} 静态代码块, 里面已经为我们加载初始化了驱动.
来源: https://www.cnblogs.com/chansblogs/p/8818071.html