如何运行sql脚本以便从java代码更新Derby架构?

我们客户端的derby数据库安装具有不同的模式版本。 例如,Customer1具有db模式版本4.1.5.0240,Customer2具有版本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.)有更好的选择吗?

谢谢Viktor

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

需要注意的一点是,在脚本中自动化error handling并不容易,因为在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.1\sql.txt); } else{ if(Installed = OtherVersions){ String sql = UpdateWith(URL file:\\PathToOtherVersion\sql.txt); } } Connect.sendSQL(sql);//send the sql to the DB 

我告诉你要弄清楚更全面的细节。 如果您已找到解决方案,为什么不在此处发布。

如果您使用交换机,您可以通过其他版本运行更新版本,如果需要,可以按正确的顺序放置版本,并在任何中断之前插入代码;