Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java运行时执行SQL脚本继续执行SQL错误_Java_Mysql_Sql_Process_Runtime - Fatal编程技术网

Java运行时执行SQL脚本继续执行SQL错误

Java运行时执行SQL脚本继续执行SQL错误,java,mysql,sql,process,runtime,Java,Mysql,Sql,Process,Runtime,我们正在尝试编写一个java代码来执行产品升级步骤。其中一个步骤是调用执行sql脚本文件 我们使用java运行时进程执行器来调用sql脚本。 有时,当产品在升级之前进行修补时,通过sql脚本创建的两个表已经创建好了。 并且进程执行失败,表已存在错误 我们希望该过程不会因任何与SQL相关的错误而失败,只需在下一条语句中继续(类似于使用mysql控制台调用SQL脚本时的行为) 我们已经试过了,但找不到解决办法。如果可能,请帮助我们,如何帮助我们 以下是SQL脚本的启动方式: 调用进程的代码:

我们正在尝试编写一个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