我用SwingWorker来让一段查询数据库的代码用线程运行,但是每次都会出现
java.sql.SQLException: Operation not allowed after ResultSet closed。这是SWINGWORKER的代码
final SwingWorker worker = new SwingWorker(){
public Object construct() {
boolean sortByScore = sortScoreButton.isSelected();
boolean showVerb = showVerbBox.isSelected();
Set bID = new HashSet();
bID.add(b.tid + "");
try{
PbSentence[] abSen = hiddenLink.getAB(b, As);
}catch(SQLException e){
e.printStackTrace();
setCursor(Cursor.getDefaultCursor());
}
return null;
}
public void finished(){
setCursor(Cursor.getDefaultCursor());
}
};
worker.start();这是查询数据库的代码:
private PbSentence[] getABC(Link B, String AorC) throws SQLException{
// final SwingWorker worker = new SwingWorker(){
// public Object construct() {
uniqueSenid.clear();
retrieved.clear();
String query = getABC.replaceAll("%%%", AorC) + B.tid;
ResultSet rs = dbConnector.executeQuery(query);
while(rs.next()){
String sid = rs.getString(1);
long pmid = rs.getInt(2);
String sen = rs.getString(3);
if(!uniqueSenid.contains(sid)){
retrieved.add(new PbSentence(sen, pmid));
uniqueSenid.add(sid);
}
}
rs.close();
PbSentence[] sens = new PbSentence[retrieved.size()];
retrieved.toArray(sens);
return sens;
}我能感觉到可能线程让RESULTSET关闭了,可是怎么解决呢
java.sql.SQLException: Operation not allowed after ResultSet closed。这是SWINGWORKER的代码
final SwingWorker worker = new SwingWorker(){
public Object construct() {
boolean sortByScore = sortScoreButton.isSelected();
boolean showVerb = showVerbBox.isSelected();
Set bID = new HashSet();
bID.add(b.tid + "");
try{
PbSentence[] abSen = hiddenLink.getAB(b, As);
}catch(SQLException e){
e.printStackTrace();
setCursor(Cursor.getDefaultCursor());
}
return null;
}
public void finished(){
setCursor(Cursor.getDefaultCursor());
}
};
worker.start();这是查询数据库的代码:
private PbSentence[] getABC(Link B, String AorC) throws SQLException{
// final SwingWorker worker = new SwingWorker(){
// public Object construct() {
uniqueSenid.clear();
retrieved.clear();
String query = getABC.replaceAll("%%%", AorC) + B.tid;
ResultSet rs = dbConnector.executeQuery(query);
while(rs.next()){
String sid = rs.getString(1);
long pmid = rs.getInt(2);
String sen = rs.getString(3);
if(!uniqueSenid.contains(sid)){
retrieved.add(new PbSentence(sen, pmid));
uniqueSenid.add(sid);
}
}
rs.close();
PbSentence[] sens = new PbSentence[retrieved.size()];
retrieved.toArray(sens);
return sens;
}我能感觉到可能线程让RESULTSET关闭了,可是怎么解决呢
1)每个例子都会覆盖doInBackground()
2)其它会被覆盖的方法有
process()
done()
3)运行SwingWorker的方法是execute()另外,我不理解你的代码中construct()方法的意义。如果是javax.swing.SwingWorker,这里的代码不会执行。
说明,我是按照那个一步一步写的,而且数据库操作也执行了,但是同时也显示了
这个错误
在哪里抛出违例?