如何运行 sql 脚本以从 java 代码更新 Derby 模式?
Posted
技术标签:
【中文标题】如何运行 sql 脚本以从 java 代码更新 Derby 模式?【英文标题】:How to run sql scripts in order to update a Derby schema from java code? 【发布时间】:2011-05-18 09:44:54 【问题描述】:我们客户方的 derby 数据库安装有不同的架构版本。例如。 Customer1 的数据库架构版本为 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.) 有更好的选择吗?
谢谢 维克托
【问题讨论】:
【参考方案1】:您可能会发现 ij.runScript 方法很有帮助:http://db.apache.org/derby/javadoc/publishedapi/jdbc4/org/apache/derby/tools/ij.html
需要注意的一点是,在脚本中自动处理错误并不容易,因为 ij 脚本中没有控制流(if/then/else)构造。但是如果你只需要以一种干净的方式执行一系列 DDL 操作,ij.runScript 是一个相当不错的技术。
【讨论】:
【参考方案2】:您可以将 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
我让你弄清楚更完整的细节。如果您已经找到解决方案,为什么不在此处发布。
如果您使用开关,您可以根据需要通过其他版本运行更新到较新版本,方法是按正确顺序放置版本,并在任何中断之前插入代码;
【讨论】:
以上是关于如何运行 sql 脚本以从 java 代码更新 Derby 模式?的主要内容,如果未能解决你的问题,请参考以下文章
如何运行 sql 查询以从不同的 joomla 组件返回数据