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

发布于 2024-11-07 19:22:24 字数 464 浏览 4 评论 0原文

我们客户端的 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.) 有更好的选择吗?

谢谢 维克多

The derby database installations of our customer sides have different schema versions. E.g. Customer1 has db schema version 4.1.5.0240, Customer2 has version 4.0.1.0330.

The idea is to update theses schemas to actual version when a new software is installed. There exists several sql scripts in order update a version to next level. E.g. update_4.1.5.0240_to_4.3.1.0020.sql.

The tool/procedure I am looking for should read the actual installed version from a derby database table. According to that version the appropriate sql script shall be run in order to update the schema to next level. This procedure must be repeated until no matching sql script can be found for the actual read version.

The installation at customer site should be done headless without any administrators help.

1.) I would prefer a java program that reads the version using JDBC. But how to run the sql scripts from within java? Should I call the ij commandline tool from java?

2.) Are there better alternatives?

Thanks
Viktor

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

水水月牙 2024-11-14 19:22:24

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

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

You might find the ij.runScript method helpful: http://db.apache.org/derby/javadoc/publishedapi/jdbc4/org/apache/derby/tools/ij.html

One thing to be aware of is that it's not easy to automate the error handling inside the script, as there are no control flow (if/then/else) constructs in the ij scripting. But if you just need to perform a series of DDL operations in a clean manner, ij.runScript is a pretty good technique.

匿名。 2024-11-14 19:22:24

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

从您的 java 代码中读取用于更新/将数据插入到各个表中的 SQL:

您的 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

我让你弄清楚更完整的细节。如果您已经找到解决方案,为什么不将其发布在这里。

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

You could store the SQL in a text file:

From your java code you read in the SQL for updating/inserting data into the various tables:

Your java code could also perform checks on which 'SQL update file to run'.

something along these lines (in very pseudo code)

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

I leave you to figure out the fuller details. If you already found a solution, why not post it here.

If you use a switch you could run updates to a newer version via other versions if required by placing the versions in the correct order, and inserting code before any break;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文