2015-01-12 3 views
0

Это мой класс connetion. Мне нужно вернуть результаты в конкретный класс. но я обнаружил, что в этом классе закрытые результаты закрыты. Я использую объединение соединений в моей связи. Я хочу создать общий класс соединений, который управляет всеми операциями для базы данных в моем приложении.Как вернуть набор результатов из метода в соединении jdbc

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

Ну, вы вызываете 'resultSet.close()' перед его возвратом. –

ответ

0

Хорошо Shree ответил на вашу проблему. Вы закрыли ResultSet перед его возвратом.

Однако, чтобы добавить к тому, чего вы пытаетесь достичь.

1) окружает ваш 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; 
     } 
    } 

} 

Это даст вам больше гибкости человека, когда ваш код расширяется.

Смежные вопросы