2013-03-18 8 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を行っていたかどうかを見つける必要がありますか?

誰もが私にこれを助けることができますか?影響を受けた行数を返しexecuteUpdate:あなたは代わりに二つの文を使用する場合があります

答えて

1

特定の組み込み関数を知りません。

しかし、私の場合は私が

select count(*) as oldcount from MYTABLE; 

は、[ドキュメント](HTTPからこのレベル

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

提案のおかげでありがとう...しかし、私はDBへのその後の呼び出しを使用したくないです。上記の例では、DBへの呼び出しが3回あるためです。私は少なくとも2000000行を最大100000行までアップロードします。だから、私はそれが実現可能ではないと思う(私の問題のため)。再度、感謝します :) – sridhar

2

事前に

おかげで...。その数値が0の場合は、挿入を実行する必要があります。

+2

であなたのクエリを実行する簡単な方法でこのようなことが可能になっているだろう:// DEV ON DUPLICATE KEY UPDATEを使用すると、行が新しい行として挿入された場合、影響を受けた行の値は1になります。既存の行が更新された場合 – NilsH

+0

はい、execute()メソッドはブール値を返します:sridharが知りたいことについての情報はありません。 –

+0

クエリが 'DELETE'操作の場合はどうなりますか?それも0を返すのではないですか?ドキュメントでは、 'executeUpdate()'メソッドは、[SQLデータ操作言語(DML)文の行数か、何も返さないSQL文の場合は0(1)(http:// docs。 oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29) –

関連する問題