Je lis la spécification Java JDBC (vr. 4) et j'ai rencontré cette déclaration:
DataSource - cette interface a été introduite dans JDBC 2.0 Facultatif API de package. Il est préférable à DriverManager car il permet les détails sur la source de données sous-jacente doivent être transparents pour le application
Ce que j'essaie de comprendre, c'est quelle est la différence entre un Connection
et un DataSource
, et pourquoi cela existe. Je veux dire, le bloc ci-dessus indique que les détails concernant une source de données sont transparents pour l'application, mais l'externalisation des propriétés de la base de données telles que le nom d'utilisateur, le mot de passe, l'URL, etc. dans un fichier de propriétés, puis l'utilisation de DriverManager de la même manière
Et l'interface DataSource
est-elle créée uniquement pour permettre de renvoyer les connexions pouvant être mises en pool, etc.? Dans Java EE, le serveur d'applications implémente-t-il cette interface et les applications déployées ont-elles une référence à une source de données au lieu d'une connexion?
Meilleure évolutivité et maintenance
Pour le gestionnaire de pilotes, vous devez connaître tous les détails (hôte, port, nom d'utilisateur, mot de passe, classe de pilote) pour vous connecter à la base de données et obtenir des connexions. Externaliser ceux-ci dans un fichier de propriétés ne change rien au fait que vous ayez besoin de les connaître.
En utilisant une source de données, il vous suffit de connaître le nom JNDI. Le serveur d'applications se soucie des détails et n'est pas configuré par le fournisseur de l'application client, mais par un administrateur où l'application est hébergée.
Evolutivité:
Supposons que vous deviez créer des connexions vous-même. Comment gérer la charge, si vous avez 10 utilisateurs et que vous en avez 1 000, vous ne pouvez pas obtenir une connexion chaque fois que vous en avez besoin et la «relâcher» plus tard, le serveur de base de données ne sortir des connexions, ce qui vous conduit au pooling de connexion. DriverManager ne le fournit pas, DataSource en fournit.
Si vous envisagez de programmer un pool de connexions, vous devez utiliser DriverManager, sinon utilisez DataSource.
Le code ci-dessous montre deux façons d'établir une connexion.
Il n'est pas nécessaire de connaître l'URL dans le cas de mySqlDataSource
car cette ligne est commentée.
public class MySqlDataSourceTest {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
/************** using MysqlDataSource starts **************/
MysqlDataSource d = new MysqlDataSource();
d.setUser("root");
d.setPassword("root");
// d.setUrl("jdbc:mysql://localhost:3306/manavrachna");
d.setDatabaseName("manavrachna");
Connection c = (Connection) d.getConnection();
/************** using MysqlDataSource ends**************/
/************** using DriverManager start **************/
Class.forName("com.mysql.jdbc.Driver");
Connection c=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/manavrachna","root","root");
/************** using DriverManager ends **************/
Statement st=(Statement) c.createStatement();
ResultSet rs=st.executeQuery("select id from employee");
while(rs.next())
{
System.out.println(rs.getInt(1));
}
}
}
Nous pouvons établir une connexion en utilisant une source de données comme suit. Utilisez la connexion pour effectuer une requête de base de données.
DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName);
Connection connection = datasource.getConnection();
Les objets DataSource peuvent fournir un regroupement de connexions et des transactions distribuées. Il est donc possible que vous deviez utiliser DataSource si vous avez besoin de l'une de ces fonctionnalités ou des deux.