Java运行时执行SQL脚本继续执行SQL错误
我们正在尝试编写一个java代码来执行产品升级步骤。其中一个步骤是调用执行sql脚本文件 我们使用java运行时进程执行器来调用sql脚本。 有时,当产品在升级之前进行修补时,通过sql脚本创建的两个表已经创建好了。 并且进程执行失败,表已存在错误 我们希望该过程不会因任何与SQL相关的错误而失败,只需在下一条语句中继续(类似于使用mysql控制台调用SQL脚本时的行为) 我们已经试过了,但找不到解决办法。如果可能,请帮助我们,如何帮助我们 以下是SQL脚本的启动方式:Java运行时执行SQL脚本继续执行SQL错误,java,mysql,sql,process,runtime,Java,Mysql,Sql,Process,Runtime,我们正在尝试编写一个java代码来执行产品升级步骤。其中一个步骤是调用执行sql脚本文件 我们使用java运行时进程执行器来调用sql脚本。 有时,当产品在升级之前进行修补时,通过sql脚本创建的两个表已经创建好了。 并且进程执行失败,表已存在错误 我们希望该过程不会因任何与SQL相关的错误而失败,只需在下一条语句中继续(类似于使用mysql控制台调用SQL脚本时的行为) 我们已经试过了,但找不到解决办法。如果可能,请帮助我们,如何帮助我们 以下是SQL脚本的启动方式: 调用进程的代码:
调用进程的代码:
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);
}
过程p;
Runtime rt=Runtime.getRuntime();
字符串c4=“cmd/c cd”+输入映射.get(“DBServerHome”)+“/bin”+”和
echo exit | mysql-u“+UpgradeRequest.dbUser+”-
p“+UpgradeRequest.dbPass+”<“+”+iiq_dir+”/identityq/WEB-
INF/database/upgrade_product_tables.mysql“+”;
p=rt.exec(c4);
stdout=新的BufferedReader(新的InputStreamReader(
p、 getInputStream());
弦线;
而((line=stdout.readLine())!=null){
日志警告(行);
}
我得到的错误是:
第11行错误1050(42S01):表“spt\U监控\U统计”
已经存在
编辑:更改sql脚本将很困难,因为它是产品升级包的一部分,而这不是我们的产品。我们只是在升级相同的。我们只是想忽略错误,让处理转到下一行。如果我们使用mysql控制台运行sql脚本,它会显示错误,但会继续执行下一行。我们可以用java运行时做同样的事情吗
感谢使用不同的表名,因为错误清楚地显示具有上述名称的表已经存在 第11行错误1050(42S01):表“spt\U监控\U统计” 已经存在 这意味着该表已经存在于您的数据库中,并且您多次执行了该查询 如果不存在,则应添加
:
CREATE TABLE IF NOT EXISTS iiq.spt_monitoring_statistic(
id varchar(32) not null,
name varchar(255),
created bigint,
modified bigint,
operation varchar(255),
source varchar(255),
或删除第一个表,然后执行上述查询:
DROP TABLE iiq.spt_monitoring_statistic
如果您想创建多个表,请将表名更改为@Himanshu said您好,谢谢。更改sql脚本将很困难,因为它是产品升级包的一部分。我们只是想忽略错误,让处理转到下一行。如果我们使用mysql控制台运行sql脚本,它会显示错误,但会继续执行下一行。我们可以用java runtime做同样的事情吗?@user3008362如果你想忽略错误,让处理转到下一行,那么用try{…}catch(异常e){}
语句包围你的查询代码谢谢。更改sql脚本将很困难,因为它是产品升级包的一部分。我们只是想忽略错误,让处理转到下一行。如果我们使用mysql控制台运行sql脚本,它会显示错误,但会继续执行下一行。我们可以用java运行时做同样的事情吗?
DROP TABLE iiq.spt_monitoring_statistic