如何运行 sql 脚本以便从 java 代码更新 Derby 模式



我们客户端的 derby 数据库安装具有不同的模式版本。 例如,客户 1 的数据库架构版本 4.1.5.0240,客户 2 的版本为 4.0.1.0330。

这个想法是在安装新软件时将这些架构更新到实际版本。存在多个 sql 脚本,以便将版本更新到下一个级别。例如update_4.1.5.0240_to_4.3.1.0020.sql。

我正在寻找的工具/过程应该从 derby 数据库表中读取实际安装的版本。根据该版本,应运行相应的 sql 脚本,以便将架构更新到下一个级别。必须重复此过程,直到找不到实际读取版本的匹配 sql 脚本。

客户现场的安装应在没有任何管理员帮助的情况下无头完成。

1.)我更喜欢使用JDBC读取版本的Java程序。但是如何从Java中运行sql脚本呢?我应该从 java 调用 ij 命令行工具吗?

2.)有更好的选择吗?

谢谢维克多

您可能会

发现ij.runScript方法很有用: http://db.apache.org/derby/javadoc/publishedapi/jdbc4/org/apache/derby/tools/ij.html

需要注意的一件事是,在脚本中自动化错误处理并不容易,因为 ij 脚本中没有控制流(if/then/else)构造。但是如果你只需要以干净的方式执行一系列DDL操作,ij.runScript是一个相当不错的技术。

您可以将 SQL 存储在文本文件中:

从您在SQL中读取的Java代码中,用于将数据更新/插入到各种表中:

您的 Java 代码还可以检查哪个"要运行的 SQL 更新文件"。

类似这些行的东西(在非常伪的代码中)

Installed = getCurrentInstalledVersion();//info stored in an admin table for current version
if (Installed < V4.1){//This would probably work better as a switch
String sql = updateWith(URL file:\PathTov4.1sql.txt);
}
else{
     if(Installed = OtherVersions){
      String sql = UpdateWith(URL file:\PathToOtherVersionsql.txt);
      }
}
Connect.sendSQL(sql);//send the sql to the DB

我让你弄清楚更详细的细节。如果您已经找到了解决方案,为什么不在此处发布。

如果使用开关,则可以根据需要通过其他版本运行更新,方法是按正确的顺序放置版本,并在任何中断之前插入代码;

最新更新