使用JDBC创建数据库模式的模式

Bjö*_*lex 1 java sql design-patterns jdbc

我有一个Java应用程序,它使用JDBC将数据从旧文件格式加载到SQLite数据库中。如果指定的数据库文件不存在,则应创建一个新的数据库文件。当前,数据库的架构已在应用程序中进行了硬编码。我宁愿将它作为SQL脚本保存在单独的文件中,但是显然没有简单的方法可以通过JDBC执行SQL脚本。还有其他方法或模式可以实现这样的目标吗?

lim*_*imc 5

您的句子“现在有一种通过JDBC执行SQL脚本的简便方法”使我有些困惑,但是我认为您是在说没有简便的方法”。:)

根据其他人的说法,是的……完美的世界场景是使用像Hibernate这样的ORM工具,但我也了解一个事实,当您在工作中处理遗留的东西时,您的团队可能不想花太多钱时间重构该项目。

我同意您应该将数据库架构重构为一个单独的文件。您实际上可以使用JDBC执行SQL脚本。当我运行某些测试用例时,我总是这样做。

这是我的方法。我使用SQL Server数据库。因此,您需要调整代码以适合您的需求。

String ddl = ... // load your SQL script file into this string
String delimiter = "GO"; // in my case, SQL Server uses GO as delimiter, you use whatever you want here.


private void executeDDL(String ddl, String delimiter) {
    Connection con = null;

    try {
        con = ... // get the connection

        // enable transaction
        con.setAutoCommit(false);

        Statement statement = con.createStatement();

        // for every DDL statement, execute it
        for (String sql : ddl.split(delimiter)) {
            if (StringUtils.isNotBlank(sql)) {
                statement.executeUpdate(sql);
            }
        }

        statement.close();
        con.commit();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        try {
            con.close();
        }
        catch (Exception ignored) {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)