SQLException:ResultSet关闭错误后不允许操作

时间:2013-11-20 15:35:53

标签: java jdbc

我收到此错误并且我不知道原因:SQLException:ResultSet关闭后不允许操作。 错误出现在行(rs1.next()){

private void tablaPeliculasMouseClicked(java.awt.event.MouseEvent evt) {                                            
    int codigo=Integer.parseInt(tablaPeliculas.getValueAt(tablaPeliculas.getSelectedRow(),0).toString());
    System.out.println("codigo: "+codigo);
    String nombre="";

    ResultSet rs1=DBVideoteca.consultaPortada(codigo);
    try {
        while(rs1.next()){
            nombre=rs1.getObject("imagen").toString();
        }
    } catch (SQLException ex) {
        Logger.getLogger(Videoteca.class.getName()).log(Level.SEVERE, null, ex);
    }

和consultaPortada方法:

static ResultSet consultaPortada(int cod){
 conn=enlace(conn);
    try{
        stt=conn.prepareStatement("select * from peliculas where codigo=?");
        stt.setInt(1, cod);
    }
    catch (SQLException ex)
   {
    System.out.println("excepcion del try 1º del metodo consulta portada");
   }
   try 
   {
    stt.executeQuery();
   }
   catch (SQLException ex)
   {
    System.out.println("error en la query " + ex);
   }

   //cerrarConexion();
   return rs;
}

5 个答案:

答案 0 :(得分:1)

consultaPortada开始,您将返回rs,而该stt.executeQuery(); 从未实际分配过。

更改此行:

rs = stt.executeQuery();

要:

{{1}}

你的问题应该消失。

答案 1 :(得分:1)

我对你的代码有很多顾虑  首先,您的问题的答案是您没有为rs分配值 所以,改变

stt.executeQuery();

要:

rs = stt.executeQuery();

其次,你的功能写得不好

static ResultSet consultaPortada(int cod){
 conn=enlace(conn);
    try{
        stt=conn.prepareStatement("select * from peliculas where codigo=?");
        stt.setInt(1, cod);
    }
    catch (SQLException ex)
   {
    System.out.println("excepcion del try 1º del metodo consulta portada");//caught an exception here
   }
   try 
   {
    stt.executeQuery(); // this should not be executed if there is an exception in above try block
   }
   catch (SQLException ex)
   {
    System.out.println("error en la query " + ex);
   }

   //cerrarConexion();
   return rs;
}

stt.executeQuery();语句也应该在之前的块中像这样

 try{
stt=conn.prepareStatement("select * from peliculas where codigo=?");
stt.setInt(1, cod);
stt.executeQuery();
}
catch (SQLException ex)
{
System.out.println("excepcion del try 1º del metodo consulta portada");
}

第三,始终关闭finally

中的连接

答案 2 :(得分:0)

试试这个..

    try{
       rs = stt.executeQuery();
   }
   catch (SQLException ex) {
    System.out.println("error en la query " + ex);
   }

答案 3 :(得分:0)

您只需检查while循环条件本身是否!rs.isClosed()

答案 4 :(得分:0)

在调用consultaPortada()之前,您之前已为rs分配了一些值,并且您已关闭该ResultSet个对象。因为它是一个封闭的结果集,所以它会抛出这个错误。

假设您尝试将stt.executeQuery();分配给结果集,请尝试此

 rs = stt.executeQuery();