2016-09-30 10 views
0

データベースにいくつかの行を挿入するのにpreparedStatement.executeUpdate()を使用していますが、動作していません。しかし、私はそれが行が挿入されていることを意味する1として値を返しますデバッグしかし、私はすべての行を挿入しないデータベースをチェックします。なぜそれが起こっているのか分かりません。どんな種類の助けにも感謝します。以下は私のコードですexecuteUpdateメソッドが正常に動作しません

Connection connection = null; 
PreparedStatement preparedStatement = null; 

try { 
    connection = getOracleConnection(requestId); 
    preparedStatement = connection.prepareStatement(createAndSaveSummarySQL()); 
    preparedStatement.setString(1, siteId); 
    preparedStatement.setString(PBNConstants.TWO, taskId); 
    preparedStatement.setString(PBNConstants.THREE, notificationType); 
    preparedStatement.setString(PBNConstants.FOUR, clusterId); 


    final long insertStartTime = System.currentTimeMillis(); 

    final int returnValue = preparedStatement.executeUpdate(); 
+0

キャッシュを使用する場合は、挿入後にロールバックを行いますか?行が挿入されているかどうかをどうやって確認しますか?あなたは別のDB接続を持っていますか? – Jens

+1

catch ... finally ...ブロックを表示してください。 – Jens

+2

取得している例外を追加してください。 –

答えて

0

以下のように適切な方法で接続が閉じられていることを確認してください。

try { 
      connection = getOracleConnection(requestId);  

    }finally{ 
    if (preparedStatement != null) preparedStatement.close(); 
     if (connection != null) connection.close(); 
    } 
+0

@Jenこんにちは、返信いただきありがとうございます。私は最後に接続を適切に閉じています。もう一つ、デバッグ中に挿入を確認しています。したがって、最終的なint returnValue = preparedStatement.executeUpdate();デバッグ中に1の値を返しますが、その直後にデータベースをチェックすると、挿入された行は表示されません。奇妙なことはすぐに私はこの声明を検査し、それは私に "SQL固有の整合性制約違反"と言うエラーを与えるので、行が挿入されると信じていますが、私はそれを見ません。 私は見たがどんな結論 –

+0

場合にはなっていない午前奇妙な行動のビット(!接続= NULL){ \t \t \t試し{ \t \t \t \t connection.close(); \t \t \t}キャッチ(最終のSQLException e)は{ \t \t \t \t \t \t \t} \t \t} –

+0

@Rohit - 私はすべての例外を得ることはありません。挿入された後、header_idに基づいてその行が更新され、更新する行が見つからないため更新中にエラーが発生するため、行が挿入されずアプリケーションが失敗するだけです。 –

関連する問題