Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
“如何写作”;如果存在,则插入“更新”;在Oracle中使用JAVA_Java_Sql_Oracle - Fatal编程技术网

“如何写作”;如果存在,则插入“更新”;在Oracle中使用JAVA

“如何写作”;如果存在,则插入“更新”;在Oracle中使用JAVA,java,sql,oracle,Java,Sql,Oracle,我有一个ERROR_MSG表,它存储带有一些ID的错误消息。如果表中不存在id,并且存在更新错误消息,我想插入错误消息。使用下面的java JDBC代码插入 ID ERROR_MSG 1 ERR1 2 ERR2 3 ERR3 这是我的代码: insertQry = "SQL"; Connection con = null; PreparedStatement stmt = null; try { con = getDataSource().getConnection();

我有一个ERROR_MSG表,它存储带有一些ID的错误消息。如果表中不存在id,并且存在更新错误消息,我想插入错误消息。使用下面的java JDBC代码插入

ID ERROR_MSG
1  ERR1
2  ERR2
3  ERR3
这是我的代码:

insertQry = "SQL";
Connection con = null;
PreparedStatement stmt = null;
try {
    con = getDataSource().getConnection();
    stmt = con.prepareStatement(insertQry);
    for(ListingAckNackData errorList: listOfListingERROR) {
        stmt.setLong(1, eqGlobalData.getSrcMsgId());
        stmt.setString(2, errorList.getGliId());
        if (null != errorList.getListingRevisionNo()) {
            stmt.setInt(3, errorList.getListingRevisionNo());
        } else {
            stmt.setNull(3, Types.NULL);
        }
        if (null != errorList.getErrorMessage()) {
            stmt.setString(4, errorList.getErrorMessage());
        } else {
            stmt.setNull(4, Types.NULL);
        }
        stmt.addBatch();
    }
    stmt.executeBatch();
}

JAVA中最简单的解决方案是检查行是否存在

首先获取要插入/更新的特定
id
的行数

select count('a') as rowExist from table where id = ?
然后,根据结果,您可以轻松地创建查询

if(rowExist > 0){
    query = "update ..";
else
    query = "insert ...";
请注意,参数的顺序可能与您预期的不同,您需要以正确的顺序创建
insert
,以便将
id
放在末尾(因为
update
需要
where
子句)


可以按要求运行数据库语句。只需使用SQL命令合并到。。。如果不匹配,请插入。。。如果匹配更新。。。
您将找到完整的示例和文档。

的可能副本,因为我不相信这在Oracle的简单
插入或更新
查询中是可能的。请注意,这在Java中提供了一个更简单的解决方案,但需要一些处理…@AxelH我如何在Java中使用if?您所说的“if”是什么意思?更新tablename SET val1=in_val1,val2=in_val2,其中val3=in_val3;如果是(sql%rowcount=0),则将值插入tablename(在值1、值2、值3中);如果结束;如何为上面的java代码编写字符串insertQry。对于需要的两个sql,我希望它在单个sql中,这在ORACLE中是不可能的?@ArpanPaliwal如果您使用从java使用
可调用的
调用的存储过程,这是可能的。为此,请检查副本。这里不需要重写解决方案,因为一切都将在数据库的存储过程中完成。您只需创建一个
可调用的
即可调用该过程。由于上述解决方案,无法使用store proc进行微小更改。使用此解决方案,您必须考虑事务处理。否则,如果存在匹配约束,多个线程可能会插入重复项或运行异常。使用一个
MERGE
语句来处理这两个问题,不是比在数据库上单击两次更好吗?
insert into Table (name, birthday, id) values (?, ?, ?)
update Table set name = ?, birthday = ? where id = ?