查找MySQL查询是否执行了更新或插入操作

5

我有一个如下的问题...

    INSERT INTO MYTABLE (f1,f2,f3,f4) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE f4=5;

我通过以下方式实现了这一点:

创建连接,编写语句并执行查询,具体如下:

    statement.execute(query);

但是现在我需要找出代码是否执行了插入或更新操作?

有人能帮忙吗?

提前致谢...

2个回答

2
您可以使用两个语句: executeUpdate 返回受影响的行数。如果该数字为0,则必须执行插入操作。

2
文档中得知:使用ON DUPLICATE KEY UPDATE,每行受影响的行数值为1,如果该行被插入为新行,则为1;如果更新现有行,则为2。 - NilsH
是的,但execute()方法只返回一个布尔值:没有关于Sridhar想知道什么的信息。 - Alban Dericbourg
如果查询是DELETE操作呢?难道它也会返回0吗?因为在文档中,executeUpdate()方法返回SQL数据操作语言(DML)语句的行数或者对于不返回任何内容的SQL语句返回0 - Wayan Wiprayoga
2
是的,他还需要从execute()切换到executeUpdate()。 - NilsH

1

我不知道任何特定的内置函数或解决方法。

但在我的情况下,我会用一种简单的方式使其成为可能。

select count(*) as oldcount from MYTABLE;

在这个层次执行您的查询

INSERT INTO MYTABLE (f1,f2,f3,f4) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE f4=5;

select count(*) as newCount from MYTABLE;

retrive OLDCOUNT and NEW COUNT

if(oldcount != new count)
{
  //InsertPerformed
}

else
{
  //updateperformed
}

谢谢你的建议,兄弟...但我不想使用后续对数据库的调用。因为上面的例子使用了3次对数据库的调用。我将上传最少2000行至最多100000行。所以,我认为这对我的问题来说不可行。再次感谢 :) - sridhar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接