我收到此错误并且我不知道原因: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;
}
答案 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();