如何运行 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 组件返回数据

如何获取 PHP 脚本以从已运行的进程发送和接收数据?

如何使用 PHP 编写类似 sql 的查询以从 BigQuery 获取数据

从 Bash 或 Perl 脚本运行 SQL 语句?

如何从java执行sql文件

选择查询以从 SQL Server 获取数据