【发布时间】:2020-01-14 13:01:47
【问题描述】:
我们正在尝试编写一个执行产品升级步骤的 java 代码。其中一个步骤是调用一个执行 sql 脚本文件。
我们正在使用 java 运行时进程执行器来调用 sql 脚本。 有时当产品在升级之前打补丁时,已经创建了几个通过 sql 脚本创建的表。 并且流程执行失败并出现表已存在错误。
我们希望该过程不会因任何与 SQL 相关的错误而失败,而是继续执行下一条语句(类似于使用 mysql 控制台调用 sql 脚本时的行为)。
我们已经尝试过,但找不到解决方案。如果可能以及如何实现,请帮助我们?
这是 SQL 脚本的启动方式:
USE iiq;
create table iiq.spt_monitoring_statistic(
id varchar(32) not null,
name varchar(255),
created bigint,
modified bigint,
operation varchar(255),
source varchar(255),
调用流程的代码:
Process p;
Runtime rt = Runtime.getRuntime();
String c4 = "cmd /c cd "+input_Map.get("DBServerHome")+"/bin"+" &&
echo exit | mysql -u "+UpgradeRequest.dbUser+" -
p"+UpgradeRequest.dbPass+" < " +'"'+iiq_dir+"/identityiq/WEB-
INF/database/upgrade_product_tables.mysql"+'"';
p=rt.exec(c4);
stdout = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line;
while ((line = stdout.readLine()) != null) {
log.warn(line);
}
我遇到的错误:
第 11 行的错误 1050 (42S01):表 'spt_monitoring_statistic' 已经存在
编辑:更改 sql 脚本会很困难,因为它是产品升级包的一部分,而这不是我们的产品。我们只是升级相同。我们只是想以某种方式忽略错误并使处理转到下一行。如果我们使用 mysql 控制台运行 sql 脚本,它会显示错误,但会继续下一行并执行它们。我们可以使用 java 运行时以某种方式做同样的事情吗?
谢谢
【问题讨论】:
标签: java mysql sql process runtime