“如何写作”;如果存在,则插入“更新”;在Oracle中使用JAVA
我有一个ERROR_MSG表,它存储带有一些ID的错误消息。如果表中不存在id,并且存在更新错误消息,我想插入错误消息。使用下面的java JDBC代码插入“如何写作”;如果存在,则插入“更新”;在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();
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 = ?