2013-03-18 80 views
5

我有一个查询,如下所示...寻找wheather MySQL查询进行更新或插入

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

,我已经通过实现,

创建连接,语句&执行查询如下

statement.execute(query); 

但是,现在我需要找到代码是否执行了INSERT或UPDATE?

任何人都可以帮助我吗?

在此先感谢...

回答

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 
} 
+0

感谢您的建议bro ...但我不想使用后续的数据库调用。因为上面的例子使用了3个对DB的调用。我将上传至少2000行,最大行数为100000行。所以,我认为这不可行(对我的问题)。再次感谢 :) – sridhar 2013-03-18 14:13:51

2

您可以使用,而不是两个语句:executeUpdate返回受影响的行数。如果这个数字是0,那么你必须执行一个插入。

+2

从[文件](HTTP执行您的查询://开发.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html) 使用ON DUPLICATE KEY UPDATE时,如果该行作为新行插入,则每行受影响的行值为1,如果现有的行更新。 – NilsH 2013-03-18 12:07:19

+0

是的,但execute()方法只返回一个布尔值:没有关于sridhar想知道什么的信息。 – 2013-03-18 12:09:42

+0

如果查询是“DELETE”操作,该怎么办?它是不是也返回0?因为在文档中,executeUpdate()方法返回[1] SQL Data Manipulation Language(DML)语句的行数,或者返回[2] 0(不返回任何内容的SQL语句](http:// docs。 oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29) – 2013-03-18 12:10:47