2017-06-10 18 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

感谢您发布此信息。我试图实施它。我会回复并将其标记为答案,一旦我开始。 –