删除java Derby数据库中的行

时间:2013-04-24 19:39:26

标签: java derby

我在本教程的最后一页: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() );
   }

}     

我有两个问题: 为什么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( );

此代码应该重新加载文本字段中的所有数据。什么是不提供此异常的工作代码?

1 个答案:

答案 0 :(得分:1)

  1. ResultSet.deleteRow()从ResultSet和DB中删除行,但您必须先调用ResultSet.next()才能到达第1行,然后才能删除或读取内容。此外,deleteRow()会删除当前行,并且由于您没有设置当前行,因此无需删除任何内容。
  2. 在使用ResultSet获取项目之前,首先必须执行ResultSet.next(),才能到达第一行。
  3. 对于您的问题,请在执行rs.next();之后添加行executeQuery()。但请注意,这只是一个快速修复,您应该始终检查是否有可用的行,并执行您的任务。