2016-11-13 10 views
0

私は、ユーザーが手動でクエリを行うことができ、プログラムをやっているとの結果が、例えば、JTableの中で示されたされています表示テーブル

userQuery= "DELETE FROM cds WHERE Nro_cd = 4;" 

と、私はこのコードを使用しています

if (statement.execute(userQuery)){ 
    ResultSet rs = statement.executeQuery(userQuery); 
    table.setModel(DbUtils.resultSetToTableModel(rs)); 
    JOptionPane.showMessageDialog(null, "Consulta Realizada"); 
    rs.close(); 
    } 
    else { 
     statement.executeUpdate(userQuery); 
     JOptionPane.showMessageDialog(null, "Modificacion Realizada"); 
    } 

私は結果セットを得ることはありませんアップデートを実行したときに私の問題は、更新されたテーブルからの選択を行うためにとにかくはありますか?

答えて

0

私の問題は、私が結果セットを取得しないと、 とにかくudpatedされたテーブルから選択するのですか?

try{ 
    if (statement.execute(userQuery)){ 
    ResultSet rs = statement.executeQuery(userQuery); 
    table.setModel(DbUtils.resultSetToTableModel(rs)); 
    JOptionPane.showMessageDialog(null, "Consulta Realizada"); 
    //rs.close(); //close in finally 
    } 
    else { 
     statement.executeUpdate(userQuery); 
     ResultSet rs = statement.executeQuery("SELECT * FROM cds"); 
     while(rs.next()) { 
      //get data from resultset 
     } 
     //rs.close(); //close in finally 
     JOptionPane.showMessageDialog(null, "Modificacion Realizada"); 
    } 
} catch(SQLException sqlexe) { 
    //log exception 
} finally { 
    //close resultset ad statements here 
} 

また、ちょうどfinallyブロックの内部resultsetstatementオブジェクトをクローズすることがベストプラクティスである、ということに注意してください:あなたは、以下に示すように、データベースのレコードを取得するために再びResultSetを使用する必要が

。私は結果セットを取得いけないアップデートを実行したとき

+0

あなたが私に少し説明することができ、どのようにこれはuserQueryは、「CDから削除された場合、結果セットをバック与えていますWHERE Nro_cd = 4; "私の問題の更新コマンドは何も結果を与えない –

+0

executeUpdate()を実行した後、SELECT * FROM CDを実行して結果セットをフェッチする必要があります – developer

+0

あなたは問題が1つ以上のテーブルを持っています。どのテーブルが変更されたのかを知る方法は見つけられません –

1

私の問題は、正しいことを...

です。影響を受ける行数(例では削除済み)は

... udpatedされた表から選択するにはどうすればよいですか?

前のステートメントで削除または更新された行を検索する方法があるかどうかを尋ねているとします。

いいえありません。

最初に、行が削除されている場合、その行は照会されません。 (明らかに!)

通常のデータベースはバージョン管理されていません。挿入/更新/削除の前にデータベースの状態を確認することはできません。あなたが削除または更新されたものを記録知る必要がある場合、私はあなたの最善の策は、これを行うには、あなたのコードを再構築することだと思います


  1. 開始トランザクション:
  2. なるように選択した行更新または削除されます。
  3. 選択した結果セットを読み、アプリケーションで必要なものを記録するか、一時テーブルに記録します。
  4. 更新/削除の実行
  5. トランザクションのコミット。

手順3で記録した情報を使用できます。


参照:

+0

私が必要とするのは、最後に変更されたテーブルの名前を取得することですので、私のプログラムで選択することができます。私はdatabasemetadataで試していたが、私はすべてのテーブルを取得します。私は削除されたデータについて心配していません。名前を知るために多少変更されたテーブルが気になります。私が必要としているのは、最後に変更されたテーブルの名前を取得することだから、私のプログラムでselectを行うことができるのですか? –

+0

*とにかくそれをするのですか? "*。 AFAIK、サポートされていません。私が説明した代替戦略を見てください。また、データベースが一時的な機能をサポートしているかどうかを確認してください。 –

+0

なので、短期的には、文字列の一致を探していると、はるかに簡単です。 –