java - 如何使用JAVA在Oracle中写入 "INSERT IF EXISTS UPDATE"

标签 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();
    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 子句)

insert into Table (name, birthday, id) values (?, ?, ?)
update Table set name = ?, birthday = ? where id = ?

关于java - 如何使用JAVA在Oracle中写入 "INSERT IF EXISTS UPDATE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47748372/

相关文章:

sql - 如何忽略从 SQL Plus 运行的 SQL 脚本中的 & 符号?

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - Spring Security 中奇怪的对象类型更改

mysql - 根据不同行中的值从同一列中选择值(如 INDEX/MATCH?)

php - 用于删除表行的脚本在 MySQL 和 PHP 中不起作用

sql - 我误解了联接吗?

java - 线程中的可变变量是线程安全的吗?

java - 使用 FFMPEG 连接两个视频文件时出现问题

sql - 根据时间差将时间序列数据组合成具有开始结束间隔的数据点

java - JBoss 7.0.1 xa 数据源异常。 javax.transaction.xa.XAException