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

Java 使用JDBC创建数据库模式的模式,java,sql,design-patterns,jdbc,Java,Sql,Design Patterns,Jdbc,我有一个Java应用程序,它使用JDBC将数据从遗留文件格式加载到SQLite数据库中。如果指定的数据库文件不存在,则应该创建一个新的数据库文件。目前,数据库的模式是在应用程序中硬编码的。我更愿意将它作为一个SQL脚本保存在一个单独的文件中,但显然,通过JDBC执行SQL脚本并不容易。有没有其他方法或模式可以实现这样的效果?正确的方法是使用Hibernate。在所有其他好处中,它能够自动创建/更新DB模式。正确的方法是使用Hibernate。在所有其他好处中,它能够自动创建/更新DB模式。如果您

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

正确的方法是使用Hibernate。在所有其他好处中,它能够自动创建/更新DB模式。

正确的方法是使用Hibernate。在所有其他好处中,它能够自动创建/更新DB模式。

如果您在开发环境中工作,我建议您使用诸如Hibernate之类的ORM工具,它可以根据您的Java域模型转发工程师来创建DB表。Hibernate具有在DB模式发生更改时自动创建/更新表的功能

当您使用SQLite时,您可以看看


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

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

当您使用SQLite时,您可以看看

我在某个地方读到,在生产环境中使用此功能是不可取的,因为增量表创建可能会对现有数据产生负面影响。

您的句子现在有了执行SQL脚本的简单方法,尽管JDBC让我困惑了一分钟,但我想您是在说没有简单的方法

根据其他人所说的,是的。。。理想的情况是使用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) {
        }
    }
}
虽然JDBC让我困惑了一分钟,但我想你是说没有简单的方法来执行SQL脚本

根据其他人所说的,是的。。。理想的情况是使用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) {
        }
    }
}

谢谢你的解决方案,看来我会同意的。不过我希望能找到一种让人感觉不那么被黑客攻击的方法。谢谢你提供的这个解决方案,看来我会同意的。然而,我希望有一种感觉不那么被黑客攻击的方式。