2014-11-02 78 views
0

我想有我可以使用像SELECT简单的SQL命令的数据库连接管理类,插入等通过简单的调用是这样的(如下班):不关闭返回ResultSet?

ResultSet test = DataService.getResultSet("SELECT NOW()"); 
test.first(); 
System.out.println(test.getString(1)); 

这是类我已经在网络上找到:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

/** 
* Database object to load drivers and perform queries 
* @author Abdulsalam Umar blog.salamtura.com 
*/ 
public class DataService { 

    private static Connection con; 
    private static final String Driver = "oracle.jdbc.driver.OracleDriver"; 
    private static final String ConnectionString = "Your database connection string"; 
    private static final String user = "username"; 
    private static final String pwd = "password"; 

    /** 
    * create Database object 
    */ 
    public DataService() { 
    } 

    /** 
    * to load the database base driver 
    * @return a database connection 
    * @throws SQLException throws an exception if an error occurs 
    */ 
    public static Connection loadDriver() throws SQLException { 
     try { 
      Class.forName(Driver); 
     } catch (ClassNotFoundException ex) { 
      System.out.println(ex.getMessage()); 
     } 
     con = DriverManager.getConnection(ConnectionString, user, pwd); 
     return con; 
    } 

    /** 
    * to get a result set of a query 
    * @param query custom query 
    * @return a result set of custom query 
    * @throws SQLException throws an exception if an error occurs 
    */ 
    public static ResultSet getResultSet(String query) throws SQLException { 
     Connection con = loadDriver(); 
     ResultSet rs; 
     PreparedStatement st = con.prepareStatement(query); 
     rs = st.executeQuery(); 

     return rs; 
    } 

    /** 
    * to run an update query such as update, delete 
    * @param query custom query 
    * @throws SQLException throws an exception if an error occurs 
    */ 
    public static void runQuery(String query) throws SQLException { 
     Connection con = loadDriver(); 
     ResultSet rs; 
     PreparedStatement st = con.prepareStatement(query); 
     st.executeUpdate(); 
    } 
} 

的问题是:是无需关闭它(和关闭语句)右返回结果集的这种方式?我怎样才能从方法中返回ResultSet?

+0

或另一个示例:http://www.programcreek.com/2009/06/prototype-of-database-class/ – Martin 2014-11-02 14:20:20

+0

[Returning a ResultSet]的可能重复(http://stackoverflow.com/questions/14853508 /返回-A-结果集) – 2014-11-02 15:11:47

回答

0

返回结果集不是一个好主意。因此,获取所需的数据并利用集合来返回数据。 This answer may be useful

0

如何传递一个回调需要ResultSet作为参数,并让客户端代码做,而你确保一切是继清理任何需要在其内部。

这是春季使用的模式JDBC ResultSetExtractorRowMapper。看看this answer