如何使用JAVA在Oracle中编写“INSERT IF EXISTS UPDATE”

问题描述 投票:0回答:2

我有一个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 sql oracle
2个回答
1
投票

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 = ?

0
投票

可以像被质疑的那样运行数据库语句。只需使用SQL命令MERGE INTO ...如果不匹配插入...如果匹配更新...您将找到一个完整的示例和文档here

© www.soinside.com 2019 - 2024. All rights reserved.