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

时间:2010-05-26 09:50:21

标签: java sql design-patterns jdbc

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

3 个答案:

答案 0 :(得分:5)

你的句子“现在有了简单的方法来执行SQL脚本,虽然JDBC”让我困惑了一分钟,但我想你是在说“有没有< / strong>简单方法“。 :)

根据其他人的说法,是的......完美的世界场景是使用ORM工具,比如Hibernate,但我也理解当你在工作中处理遗留的东西时,你的团队可能不想花太多时间重构那个项目。

我同意您应该将数据库架构重构为单独的文件。您实际上可以使用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) {
        }
    }
}

答案 1 :(得分:0)

“正确”的方式是使用Hibernate。在所有其他好处中,它能够自动创建/更新数据库架构(SO1SO2)。

答案 2 :(得分:0)

如果您在开发环境中工作,我建议您使用像Hibernate这样的ORM工具,它会根据您的Java Domain Models转发工程师来创建数据库表。 Hibernate具有自动创建/更新表的功能,以防数据库模式发生更改。

当您使用SQLite时,您可以查看Hibernate for SQLite

我在某处读过,不建议在生产环境中使用此功能,因为增量表创建可能会对现有数据产生负面影响。