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

Posted

技术标签:

【中文标题】如何从jdbc连接中的方法返回结果集【英文标题】:How to return result set from method in jdbc connection 【发布时间】:2015-01-12 09:25:24 【问题描述】:

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

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;
    

【问题讨论】:

嗯,你在返回之前打电话给resultSet.close() 【参考方案1】:

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;
        
    


这将在您的代码扩展时为您提供更大的灵活性。

【讨论】:

以上是关于如何从jdbc连接中的方法返回结果集的主要内容,如果未能解决你的问题,请参考以下文章

Java JDBC 从不同的调用返回重复的结果集

JDBC结果集

JDBC完美连接方法

Atitit  jdbc 处理返回多个结果集

PostgreSQL & JDBC“查询返回了多个结果集”

如何从 Django 中的 get_queryset 方法返回多个查询集对象或添加查询集结果