2017-06-10 47 views
0

我想寫一個實現DataSource的類。這看起來很簡單,但我看到了甲骨文所有的例子聲明類是這樣的:在Java中實現DataSource連接到我的數據庫

public class ConnectionPoolingBean implements SessionBean { 
    .... 
} 

我希望看到更多的東西是這樣的:

public class MyDataSource implements DataSource { 
    .... 
} 

而且,我不瞭解連接的實際工作方式。 getConnection()方法只接受用戶名和密碼的參數。那麼我如何連接到我的數據庫?
最終,我需要了解的是如何連接到我的數據庫並使用DataSource從查詢返回結果集。我只是沒有看到任何清晰的例子,說明如何編寫一個類來在我的WebApp上使用它。

這是我一直在讀的東西,現在只是讓我困惑。 https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html

+1

你不應該自己實現一個DataSource。您的數據庫驅動程序應該提供一個(或您的連接池庫) –

回答

0

case.If你正在使用的應用服務器,您可以使用應用服務器的連接池或使用開源DBCP連接池機制使用任何連接池供您使用。

<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp --> 
<dependency> 
    <groupId>commons-dbcp</groupId> 
    <artifactId>commons-dbcp</artifactId> 
    <version>1.2.2</version> 
</dependency> 

import org.apache.commons.dbcp2.BasicDataSource; 


public class DataBaseUtility 
{ 
    private static BasicDataSource dataSource; 

    private static BasicDataSource getDataSource() 
    { 

     if (dataSource == null) 
     { 
      BasicDataSource ds = new BasicDataSource(); 
      ds.setUrl("jdbc:mysql://localhost/test"); 
      ds.setUsername("root"); 
      ds.setPassword("password"); 


      ds.setMinIdle(5); 
      ds.setMaxIdle(10); 
      ds.setMaxOpenPreparedStatements(100); 

      dataSource = ds; 
     } 
     return dataSource; 
    } 

    public static void main(String[] args) throws SQLException 
    { 

     try (BasicDataSource dataSource = DataBaseUtility.getDataSource(); 
       Connection connection = dataSource.getConnection(); 
       PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM account");) 
     { 
System.out.println("The Connection Object is of Class: "+connection.getClass()); 
      try (ResultSet resultSet = pstmt.executeQuery();) 
      { 
       while (resultSet.next()) 
       { 
        System.out.println(resultSet.getString(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3)); 
       } 
      } 
      catch (Exception e) 
      { 
       connection.rollback(); 
       e.printStackTrace(); 
      } 
     } 
    } 

} 
+0

感謝您發佈此信息。我試圖實施它。我會回覆並將其標記爲答案,一旦我開始。 –