这是我的连词课程。我需要将结果集返回给特定的类。但是我发现结果集在那个类中是关闭的。我在连接中使用连接池。 我想创建一般连接类来管理我的应用程序中的数据库的所有操作。
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class OpenTestConnection {
private DataSource dataSource=null;
private Connection connection=null;
private Statement statement=null;
public OpenTestConnection()
{
System.out.println("come in Openconnection....");
try {
// Get DataSource
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/ietddb");
} catch (NamingException e) {
e.printStackTrace();
}
}
private Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public ResultSet selectfromtable(String sql)
{
System.out.println("come here....");
ResultSet resultSet = null;
try {
connection = getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally {
try { if(null!=resultSet)resultSet.close();} catch (SQLException e)
{e.printStackTrace();}
try { if(null!=statement)statement.close();} catch (SQLException e)
{e.printStackTrace();}
try { if(null!=connection)connection.close();} catch (SQLException e)
{e.printStackTrace();}
}
return resultSet;
}
}
答案 0 :(得分:0)
Shree已经回答了你的问题。在返回之前已关闭ResultSet。
但是,要添加到您想要实现的目标。
1)在try catch中包围你的return dataSource.getConnection
。
2)创建单独的query
功能和connection close
功能,如下所示
protected Connection connection = null;
protected Statement statement = null;
protected PreparedStatement prepared = null;
// executeQuery
protected ResultSet execute(String sql) throws SQLException {
connection = getConnection();
statement = connection.createStatement();
return statement.executeQuery(sql);
}
//now have a close function
protected void commitAndClose() {
if (connection != null) {
try {
connection.commit();
} catch (SQLException ex) {
// your code for handling ex
} finally {
try {
resultSet.close(); //do not know why you are closing resultset
statement.close();
connection.close();
} catch (SQLException ex) {
LOGGER.log(Level.SEVERE, null, ex);
}
connection = null;
}
}
}
当您的代码扩展时,这将为您提供更多灵活性。