0

私はこのチュートリアルの最後のページにいます: http://www.homeandlearn.co.uk/java/delete_a_record_from_a_database.htmlは、Derby データベースのレコードの削除に関するものです。削除ボタンの私のコードは次のとおりです。

private void btnDeleteRecordActionPerformed(java.awt.event.ActionEvent evt) {                                                
   try{

    String host = "jdbc:derby://localhost:1527/Employees";
    String uName = "bjorn";
    String uPass= "";
    con = DriverManager.getConnection( host, uName, uPass );
    PreparedStatement pstmt = con.prepareStatement("SELECT * FROM  App.Workers",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
   con.setAutoCommit(false);
    rs = pstmt.executeQuery();
    //count++;
     if (rs.absolute(count)) {
    rs.absolute(count);
    //rs.next();
    rs.deleteRow( );

    pstmt.close( );
    rs.close( );
     }

   }
   catch (SQLException err) {
    System.out.println(err.getMessage() );
   }

}     

2 つの質問があります。なぜ機能しrs.deleteRow( );ないのですか?
メソッドに次のコードを含めると、エラーが発生します。

Invalid operation at current cursor position.

stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

        String sql = "SELECT * FROM App.Workers";
        rs = stmt.executeQuery(sql);

        int id_col = rs.getInt("ID");
        String id = Integer.toString(id_col);
        String first2 = rs.getString("First_Name");
        String last2 = rs.getString("Last_Name");
        String job2 = rs.getString("Job_Title");

        textID.setText(id);
        textFirstName.setText(first2);
        textLastName.setText(last2);
        textJobTitle.setText(job2);
        stmt.close( );

このコードは、テキスト フィールドのすべてのデータをリロードすることになっています。この例外を与えない作業コードは何ですか?

4

1 に答える 1

1
  1. ResultSet.deleteRow() はResultSetDBから行を削除ResultSet.next()しますが、何かを削除または読み取る前に、最初の行を取得するために を呼び出す必要があります。また、deleteRow()現在の行を削除します。現在の行が設定されていないため、削除するものはありません。
  2. を使用ResultSetしてアイテムを取得する前ResultSet.next()に、最初の行に到達するために , を実行する必要があります。

あなたの問題については、どちらの場合も、rs.next();実行後に行を追加してください。executeQuery()ただし、これは簡単な修正にすぎないことに注意してください。使用可能な行があるかどうかを常に確認し、タスクを実行する必要があります。

于 2013-04-24T19:43:54.490 に答える