2017-06-10 1 views
0

J'essaie d'écrire une classe qui implémente DataSource. Cela semble assez simple, mais les exemples que je vois pour Oracle tous déclarer la classe comme ceci:Implémentation de DataSource en Java pour la connexion à ma base de données

public class ConnectionPoolingBean implements SessionBean { 
    .... 
} 

je me attends de voir quelque chose comme ceci:

public class MyDataSource implements DataSource { 
    .... 
} 

Aussi, je n » Je ne comprends pas comment fonctionne la connexion. La méthode getConnection() prend uniquement les arguments pour le nom d'utilisateur et le mot de passe. Alors, comment je me connecte à ma base de données?
En fin de compte, ce que je dois comprendre est de savoir comment me connecter à ma base de données et retourner un jeu de résultats à partir d'une requête en utilisant DataSource. Je ne vois pas d'exemples clairs de comment écrire une classe pour l'utiliser sur ma WebApp.

Voici ce que j'ai lu, ce qui me perturbe maintenant. https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html

+1

Vous n'êtes pas censé mettre en œuvre un DataSource vous. Votre pilote de base de données est supposé en fournir un (ou votre bibliothèque de pool de connexion) –

Répondre

0

Utilisez une piscine de connexion pour votre utilisation case.If vous utilisez le serveur d'applications, vous pouvez utiliser la piscine de connexion de serveur d'applications ou utiliser le mécanisme de pool de connexion opensource DBCP.

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

Exemple

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

Merci de l'avoir posté. J'essaie de l'implémenter. Je posterai et marquerai comme la réponse une fois que je l'ai commencé. –