2

行を選択して「削除」ボタンを押すと、次のようになります。

スイングインターフェイスでは、選択した行が削除されます(予想どおり)。だが

実際のデータベースでは、選択した行が何であれ、最後の行が削除されます(予期されていません)。削除された行は、実際に選択された行が何であれ、常にデータベースの最後の行です。私のコードにはエラーや例外はありません。中断することなく動作します。

私は実際に必要なものをコードに追加しました:

  Statement sqlStatement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

選択した行を削除するには、「削除」ボタンを追加します。

JButton removeEmployee = new JButton("Remove Selected");
removeEmployee.addActionListener(new ActionListener()
{
  public void actionPerformed(ActionEvent e)
  {
    dTableModel.removeRow(table.getSelectedRow());
    try
    {
      resultSet.absolute(table.getSelectedRow());
      resultSet.deleteRow();

    } catch (SQLException e1)
    {
      e1.printStackTrace();
    }
  }
});
4

2 に答える 2

2

ありがとう@Germann..。

私はそれを解決しました、そして私は他の人がそれから助けを得ることができるように解決策を提供します。

ブール値を返すのは正しいですがresultSet.absolute(...);、引数の指定された行にカーソルを移動しますresultSet.absolute(table.getSelectedRow());。それで、何が問題でしたか。

問題は次のとおりです。 (最初の)選択された行が削除され、2番目のメソッドは何も選択されないため、-1を返すため、この行dTableModel.removeRow(table.getSelectedRow());を前に呼び出すことはできません 。ドキュメントで指定されているように、カーソルを最後の行に移動します。これにより、基になるデータベースの最後の行が削除されます。resultSet.absolute(table.getSelectedRow());table.getSelectedRow()absolute(-1)

したがって、解決策はそれらの行の順序を逆にすることです、そして私は後にそれを作ることを好みますresultSet.deleteRow();

    JButton removeEmployee = new JButton("Remove Selected");
    removeEmployee.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        try
        {/* here I added +1 because it moves the row to the selected row -1 
            I don't know why. But it now works well */
          resultSet.absolute(table.getSelectedRow()+1);
          resultSet.deleteRow();
          dTableModel.removeRow(table.getSelectedRow());
        } catch (SQLException e1)
        {
          e1.printStackTrace();
        }
      }
    });
于 2012-08-24T17:56:16.030 に答える
2
removePres.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        // Will remove which ever row that is selected
        try {
            // Moves the database to the row currently selected
            // getSelectedRow returns the row number for the selected            
            resultSet.absolute(table.getSelectedRow()+1);
            resultSet.deleteRow();
            dTableModel.removeRow(table.getSelectedRow());
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

結果セットにエラーが表示されますか?

于 2013-03-21T06:01:29.443 に答える