2012-02-11 39 views
1

我只是使用資源共享方法來掌握Tomcat和mySQL。它的一切正常,但我不認爲我正在處理連接權。我習慣於將JDBC直接用於MySQL,而不是Tomcat。Tomcat數據庫連接,我正在做對嗎?

我的servlet在第一次運行時調用intializeConnection(),而不再次運行。但是我認爲我應該在每個陳述上真正打開和關閉連接?有人可以調整下面的代碼來顯示處理連接的正確方法,我有點困惑。

public Connection con; 

    public void intializeConnection() throws SQLException, NamingException{ 
     connect(); 
    } 

    public void connect() throws SQLException, NamingException{ 

     Context initCtx = new InitialContext(); 
     Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
     DataSource ds = (DataSource) envCtx.lookup("jdbc/TestDB"); 
     con = ds.getConnection();    

    } 

    public void excuteStatement(String query) throws SQLException{ 
     con.createStatement().executeUpdate(query); 
    } 

    public ResultSet getResultSet(String query) throws SQLException{ 
     //not yet implemented 

    } 

我的第二個問題是,我不知道如何以這種方式返回resultSet?

TIA

回答

3

我認爲一個更好的設計是採用爲每個請求的連接,並關閉它,當你完成。在我看來,它會更好地擴展。

看看JDBC教程。它會告訴你如何得到一個結果,還有更多:

http://docs.oracle.com/javase/tutorial/jdbc/basics/

+0

感謝達菲,這就是我的想法,打開和關閉每個請求。 – 2012-02-11 22:21:54

3

這是更好,如果你使用連接池是tomcat的一部分,所有你需要做的就是定義一個連接池文件名爲context.xml,並將其放置在您的WebContent \ META-INF文件夾中(如果您使用的是eclipse,它位於戰爭文件根目錄下的META-INF文件夾中),這是一個我使用的示例

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Resource name="jdbc/theDB" 
     auth="Container" 
     type="javax.sql.DataSource" 
     driverClassName="org.postgresql.Driver" 
     url="jdbc:postgresql://127.0.0.1:5432/theDB" 
     username="theusername" 
     password="thepassword" 
     maxActive="20" maxIdle="10" 
     maxWait="-1" 
    /> 
</Context> 

然後你可以在每個請求方法中打開和關閉連接。另外你上面的代碼查找並不需要兩次調用jndi你可以做一個單一的調用,如果你查找下面的字符串java:comp/env/jdbc/TestDB

另外你不想返回一個ResultSet您應該返回表示結果集中數據的對象,因此如果您的查詢返回Customer對象,則應將getResultSet的方法稱爲getCustomers,並返回一個List <Customer>

JDBC很難處理特別是對於異常處理和關閉語句,連接,結果集等等。我強烈建議您使用類似SpringJDBC模板的代碼,以使代碼更簡單。