Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java.sql.SQLException:结果集关闭后不允许操作_Java_Sql - Fatal编程技术网

获取java.sql.SQLException:结果集关闭后不允许操作

获取java.sql.SQLException:结果集关闭后不允许操作,java,sql,Java,Sql,我的代码运行良好,但我经常遇到这种异常,它导致了一点延迟。。。我怀疑这一部分产生了例外 try { try { rs = dbConnection.getStatement().executeQuery("SELECT * FROM healthgym.member WHERE member_id = " + id); rs.next(); } catch (SQLException ex) {

我的代码运行良好,但我经常遇到这种异常,它导致了一点延迟。。。我怀疑这一部分产生了例外

try {
        try {
            rs = dbConnection.getStatement().executeQuery("SELECT * FROM healthgym.member WHERE member_id = " + id);
            rs.next();
        } catch (SQLException ex) {
            Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
        }
        m.setMember_id(rs.getInt("member_id"));
        m.setRec_id(rs.getInt("rec_id"));
        m.setTrainer_id(rs.getInt("trainer_id"));
        m.setFname(rs.getString("fname"));
        m.setLname(rs.getString("lname"));
        m.setMname(rs.getString("mname"));
        m.setEmail(rs.getString("email"));
        m.setPhoneNo(rs.getInt("phoneno"));
        m.setAge(rs.getInt("age"));............
稍后我使用m对象填充一些文本字段

编辑1:我仍然得到那个例外。。。下面就是发生的事情。。。我在Jtable中选择一行,然后按下编辑按钮,异常被抛出,但运行正常 这是我按下编辑按钮时的名称

  private void editButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:
    int id = ((Number) model.getValueAt(jTable1.getSelectedRow(), 0)).intValue() ;
    System.out.println(id);

      m = new Member();
    c.getMember(m,id);

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new EditMember(c,model,m).setVisible(true);
        }
    });


}       
EditMember是一个GUI,这里是它的构造函数

public class EditMember extends javax.swing.JFrame {

/** Creates new form EditMember */
public EditMember(Controller c, ResultSetTableModel model , Member m) {

    initComponents();
    this.c = c;
    this.model = model ;
    this.m = m ;
    memberID.setText(Integer.toString(m.getMember_id()));
    recID.setText(Integer.toString(m.getRec_id()));
    trainerID.setText(Integer.toString(m.getTrainer_id()));
    fName.setText(m.getFname());
    lName.setText(m.getLname());.......
编辑2:

那,;发生异常的位置:

public Object getValueAt( int row, int column )
  throws IllegalStateException


  {
      // ensure database connection is available
      if ( !dbConnection.isConnectedToDatabase() )
         throw new IllegalStateException( "Not Connected to Database" );
  // obtain a value at specified ResultSet row and column

  try
  {
     resultSet.absolute( row + 1 );
     return resultSet.getObject( column + 1 );
  } // end try
  catch ( SQLException sqlException )
  {
      System.out.println("Exception from here dude");
     sqlException.printStackTrace();
  } // end catch
我想问题是因为我使用的结果集与我以前用于构建JTable的结果集相同。

应该是这样的

    if(rs.next(){
  m.setMember_id(rs.getInt("member_id"));
}
所以所有的设置值都将在try块中

为什么会出现错误? 因为有时当结果为空时,结果集将由rs.next()关闭

如果将其放入while{查询结果中有多行}或{当查询输出中只接受一行时}

try {
    Statement stmt = dbConnection.createStatement();
    ResultSet rs = stmt.executeQuery
    ("SELECT * FROM healthgym.member WHERE member_id = " + id);

    // Fetch each row from the result set
    while (rs.next()) {
        // Get the data from the row using the column index
        m.setMember_id(rs.getInt("member_id"));
        m.setRec_id(rs.getInt("rec_id"));
        m.setTrainer_id(rs.getInt("trainer_id"));
        m.setFname(rs.getString("fname"));
        m.setLname(rs.getString("lname"));
        m.setMname(rs.getString("mname"));
        m.setEmail(rs.getString("email"));
        m.setPhoneNo(rs.getInt("phoneno"));
        m.setAge(rs.getInt("age"));
    }
} catch (SQLException e) {
}

试试这种方法。

您从哪里得到异常?要关闭的结果集在哪里?
rs
在哪里声明?它在线程之间共享吗(坏主意)?我指定了。。。rs在具有getMember方法的类中声明。不是,;s未共享。我仍在获取例外。是否要共享完整代码?你在哪里关闭rs?对不起,这段代码。我不知道你的问题。我已经找到了错误的真实位置。。。我将编辑我的帖子。