java.sql.SQLException:结果集关闭后不允许操作prob
我尝试运行此代码时出错 我尝试了很多次 我尝试在从daabase读取下一个值之前延迟3秒 我有错误 java.sql.SQLException:结果集关闭后不允许操作 你怎么看这个错误,因为我现在不知道这个错误 这是我的密码,请帮帮我java.sql.SQLException:结果集关闭后不允许操作prob,java,sql-server,swing,jdbc,thread-sleep,Java,Sql Server,Swing,Jdbc,Thread Sleep,我尝试运行此代码时出错 我尝试了很多次 我尝试在从daabase读取下一个值之前延迟3秒 我有错误 java.sql.SQLException:结果集关闭后不允许操作 你怎么看这个错误,因为我现在不知道这个错误 这是我的密码,请帮帮我 try { Connection conn = null; Statement st = null; ResultSet rs = null; String dbUrl = "jdbc:mysql:/
try {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
String dbUrl = "jdbc:mysql://*******/jointdb";
String dbUsr = "****";
String dbPass = "*****";
String sql = "select * from eridb";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(dbUrl, dbUsr, dbPass);
st = conn.createStatement();
rs = st.executeQuery(sql);
while ( rs.next() ) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
String value = rs.getString("id");
jTextArea1.setText(value);
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (SQLException ex) {
Logger.getLogger(KK.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
} catch (Exception e) { }
finally{
try{
if (rs != null)
rs.close();
if (st != null)
st.close();
if (conn != null)
conn.close();
}catch(SQLException e){}
}
您可以在不同的线程中访问结果集。调用时,原始线程已完成其try块,移动到finally,并关闭结果集。看起来您的线程在主代码中是一个单独的进程。主代码将与线程并行运行 也许您将创建的线程与主代码连接起来,因此主代码可以等待线程结束,然后再继续关闭结果集。要实现这一点,请尝试为线程提供一个引用,例如thread1,然后在主代码中添加以下语句
thread1.join();
根据定义,SwingUtilities.invokeLater将在处理所有AWT事件后异步运行
因此,最有可能的情况是,在执行SwingUtilities.invokeLater中的可运行代码之前,到达finally块
我认为没有必要异步执行记录处理,我建议您在不将Jtextarea与当前线程分离的情况下读取并填充Jtextarea。您的意思是,请给我更多提示I am put finally block after first try in SwingUtilities.invokeLater thread I am put finally block after try in SwingUtilities.invokeLater thread我的建议是,您应该将代码移动到新的可运行{}中,并将其移动到try块中,然后删除invokeLater。顺便问一下,有什么特别的理由这样做吗?