【发布时间】:2015-10-24 22:02:29
【问题描述】:
我有 2 节课。问题是,如果我尝试执行第二个查询,我得到一个结果集已关闭异常。第二个查询rs.next 返回真。你能告诉我我在哪个位置关闭了错误的资源吗?如果我从 releaseResources() 方法中删除 this.queryResult.close() 和 this.statement.close(),错误是“连接已关闭。我不是在每次调用时创建一个新的连接实例、preparedstatement 和结果集吗?
主要:
public static void main(String[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException, InterruptedException {
DatabaseConnectionHelper con = new DatabaseConnectionHelper();
ResultSet rs = con.executeQuery("SELECT * FROM [winfiler].[dbo].[customer_data]");
System.out.println(rs.next());
while(rs.next()){
System.out.println(rs.getString("name"));
}
con.releaseResources();
ResultSet rs3 = con.executeQuery("SELECT * FROM [winfiler].[dbo].[customer_data]");
System.out.println(rs3.next());
while(rs3.next()){
System.out.println(rs.getString("name"));
}
}
数据库连接的帮助类:
public class DatabaseConnectionHelper {
private Connection connection=null;
private PreparedStatement statement=null;
private ResultSet queryResult=null;
public Connection connectToDatabase(){
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=******;user=********;password=********");
return connection;
} catch (ClassNotFoundException ex) {
MessageHelper.createClassNotFoundExceptionMessage("Eine exception ist aufgetreten", "Classe konnte nicht gefunden werden (Verbindung zur Datenbank)", ex.getMessage());
} catch (SQLException ex) {
MessageHelper.createSQLExceptionMessage("Eine exception ist aufgetreten", "Probleme beim der Datenabfrage - DatabaseConnectionHelper", ex.getMessage());
}
return null;
}
public ResultSet executeQuery(String query){
try{
statement = connectToDatabase().prepareStatement(query);
queryResult = statement.executeQuery();
return queryResult;
}catch (SQLException ex) {
MessageHelper.createSQLExceptionMessage("Eine exception ist aufgetreten", "Probleme beim der Datenabfrage - DatabaseConnectionHelper", ex.getMessage());
}
return null;
}
public boolean releaseResources(){
try {
this.queryResult.close();
this.statement.close();
this.connection.close();
return true;
} catch (SQLException ex) {
MessageHelper.createSQLExceptionMessage("Eine exception ist aufgetreten", "Resourcen konnten nicht freigegeben werden - DatabaseConnectionHelper", ex.getMessage());
}
return false;
}
}
【问题讨论】:
-
releaseResources()称为connection.close()。所以,调用这个函数后连接关闭也就不足为奇了。
标签: java sql sql-server jdbc