如何运行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
我告诉你要弄清楚更全面的细节。 如果您已找到解决方案,为什么不在此处发布。
如果您使用交换机,您可以通过其他版本运行更新版本,如果需要,可以按正确的顺序放置版本,并在任何中断之前插入代码;
- Java SQLexception无效的游标状态 – 没有当前行
- 在独立Java应用程序中设置嵌入式Derby数据库
- Hibernate / JPA + Derby – SELECT语句在GROUP BY,ORDER BY或选择列表中包含太多项
- 德比:相当于CONCAT
- 如何以小写名称创建表 – JavaDB / Derby?
- java.lang.ClassNotFoundException Netbeans java derby
- Apache Derby – java.sql.SQLException:无法启动数据库
- 未找到Derby嵌入式数据库’APPDATA’文件夹,尝试创建OS X应用程序.app
- JavaDB(derby)数据库的路径?