如何从jdbc连接中的方法返回结果集

时间:2015-01-12 09:25:24

标签: java jdbc connection resultset

这是我的连词课程。我需要将结果集返回给特定的类。但是我发现结果集在那个类中是关闭的。我在连接中使用连接池。 我想创建一般连接类来管理我的应用程序中的数据库的所有操作。

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;
    }
}

1 个答案:

答案 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;
        }
    }

}

当您的代码扩展时,这将为您提供更多灵活性。