2014-11-02 76 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