J'essaie de suivre le didacticiel JDBC de Sun sur http://Java.Sun.com/docs/books/tutorial/jdbc/basics/connecting.html
Il donne l'exemple de code suivant:
DataSource ds = (DataSource) org.Apache.derby.jdbc.ClientDataSource()
ds.setPort(1527);
ds.setHost("localhost");
ds.setUser("APP")
ds.setPassword("APP");
Connection con = ds.getConnection();
Ce code ne se compile pas car l'interface DataSource
n'a aucune de ces méthodes, à l'exception de la méthode getConnection()
invoquée en dernier.
(Voici le javadoc: http://Java.Sun.com/javase/6/docs/api/javax/sql/DataSource.html )
Qu'est-ce que je rate?
Edit: J'essaie actuellement de me connecter à MySQL (com.mysql.jdbc
) Et je ne trouve pas le javadoc pour cela. J'accepte une réponse qui m'indique soit:
1) documentation pour com.mysql.jdbc
Concernant un DataSource
que je peux comprendre, ou
2) donne un exemple à suivre pour ce que le code du tutoriel devrait être, pour n'importe quelle base de données.
Fondamentalement, dans JDBC, la plupart de ces propriétés ne sont pas configurables dans l'API comme ça, elles dépendent plutôt de l'implémentation. La façon dont JDBC gère cela est de permettre que l'URL de connexion soit différente par fournisseur.
Donc, ce que vous faites est d'enregistrer le pilote afin que le système JDBC puisse savoir quoi faire avec l'URL:
DriverManager.registerDriver((Driver) Class.forName("com.mysql.jdbc.Driver").newInstance());
Ensuite, vous formez l'URL:
String url = "jdbc:mysql://[Host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]"
Et enfin, utilisez-le pour obtenir une connexion:
Connection c = DriverManager.getConnection(url);
Dans JDBC plus sophistiqué, vous vous impliquez dans les pools de connexions et autres, et les serveurs d'applications ont souvent leur propre façon d'enregistrer les pilotes dans JNDI et vous recherchez une DataSource à partir de là, et appelez getConnection dessus.
En ce qui concerne les propriétés prises en charge par MySQL, voir ici .
EDIT: Une autre pensée, techniquement, avoir juste une ligne de code qui fait Class.forName ("com.mysql.jdbc.Driver") devrait être suffisant, car la classe devrait avoir son propre initialiseur statique qui enregistre une version, mais parfois un Le pilote JDBC ne le fait pas, donc si vous n'êtes pas sûr, il y a peu de mal à en enregistrer un deuxième, il crée simplement un objet en double dans la mémoire.
Une chose que vous voudrez peut-être examiner est le projet Commons DBCP . Il fournit un BasicDataSource qui est configuré de manière assez similaire à votre exemple. Pour l'utiliser, vous avez besoin du JAR JDBC du fournisseur de base de données dans votre chemin de classe et vous devez spécifier le nom de classe de pilote du fournisseur et l'URL de la base de données au format approprié.
Modifier:
Si vous souhaitez configurer un BasicDataSource
pour MySQL, vous feriez quelque chose comme ceci:
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("username");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://<Host>:<port>/<database>");
dataSource.setMaxActive(10);
dataSource.setMaxIdle(5);
dataSource.setInitialSize(5);
dataSource.setValidationQuery("SELECT 1");
Le code qui a besoin d'un DataSource
peut alors l'utiliser.
DataSource est spécifique au fournisseur, pour MySql vous pouvez utiliser MysqlDataSource qui est fourni dans le pot de connecteur MySql Java Java:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName("xyz");
dataSource.setUser("xyz");
dataSource.setPassword("xyz");
dataSource.setServerName("xyz.yourdomain.com");
utilisez MYSQL comme exemple: 1) utilisez des pools de connexion à la base de données: pour l'exemple: Apache Commons DBCP, vous avez également besoin du package jar basicDataSource dans votre chemin de classe
@Bean
public BasicDataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/gene");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
2) utilisez le pilote basé sur JDBC, il est généralement utilisé si vous ne considérez pas le pool de connexions:
@Bean
public DataSource dataSource(){
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/gene");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
Je pense que l'exemple est faux - javax.sql.DataSource
n'a pas non plus ces propriétés. Votre DataSource
doit être du type org.Apache.derby.jdbc.ClientDataSource
, qui devrait avoir ces propriétés.
Le javadoc pour DataSource auquel vous faites référence est du mauvais package. Vous devriez regarder javax.sql.DataSource . Comme vous pouvez le voir, c'est une interface. La configuration de l'hôte et du nom de port dépend de l'implémentation, c'est-à-dire du pilote JDBC que vous utilisez.
Je n'ai pas vérifié les javadocs Derby mais je suppose que le code devrait compiler comme ceci:
ClientDataSource ds = org.Apache.derby.jdbc.ClientDataSource()
ds.setHost etc....