http://Java.Sun.com/docs/books/tutorial/jdbc/basics/connecting.html でSunのJDBCチュートリアルをフォローしようとしています。
次のコード例を示します。
_DataSource ds = (DataSource) org.Apache.derby.jdbc.ClientDataSource()
ds.setPort(1527);
ds.setHost("localhost");
ds.setUser("APP")
ds.setPassword("APP");
Connection con = ds.getConnection();
_
DataSource
インターフェースには、最後に呼び出されたgetConnection()
メソッドを除いて、これらのメソッドがないため、このコードはコンパイルされません。
(javadocは次のとおりです。 http://Java.Sun.com/javase/6/docs/api/javax/sql/DataSource.html )
私は何が欠けていますか?
編集:私は実際にMySQL(_com.mysql.jdbc
_)に接続しようとしていますが、そのためのjavadocが見つかりません。次のいずれかを指す回答を受け入れます。
1)理解できるDataSource
に関する_com.mysql.jdbc
_のドキュメント、または
2)データベースのチュートリアルのコードがどうあるべきかに従うべき例を示します。
基本的に、JDBCでは、これらのプロパティのほとんどは、そのようなAPIで構成可能ではなく、実装に依存しています。 JDBCがこれを処理する方法は、接続URLをベンダーごとに異なるようにすることです。
したがって、JDBCシステムがURLをどうするかを認識できるように、ドライバーを登録します。
DriverManager.registerDriver((Driver) Class.forName("com.mysql.jdbc.Driver").newInstance());
次に、URLを作成します。
String url = "jdbc:mysql://[Host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]"
そして最後に、それを使用して接続を取得します。
Connection c = DriverManager.getConnection(url);
より洗練されたJDBCでは、接続プールなどに関与します。アプリケーションサーバーは、多くの場合、JNDIでドライバーを登録する独自の方法を持ち、そこからDataSourceを検索し、その上でgetConnectionを呼び出します。
MySQLがサポートするプロパティについては、 here を参照してください。
編集:もう1つの考え、技術的にはClass.forName( "com.mysql.jdbc.Driver")を実行するコード行があれば十分です。クラスにはバージョンを登録する独自の静的イニシャライザが必要ですが、時にはJDBCドライバーはサポートしていないので、よくわからない場合、2番目のドライバーを登録してもほとんど問題はありません。それは単に重複したオブジェクトを記憶に作成するだけです。
ご覧になりたいものの1つは、 Commons DBCP プロジェクトです。これは、 BasicDataSource を提供します。これは、例とほぼ同様に構成されています。それを使用するには、クラスパスにデータベースベンダーのJDBC JARが必要であり、ベンダーのドライバークラス名とデータベースURLを適切な形式で指定する必要があります。
編集:
MySQLのBasicDataSource
を設定する場合、次のようなことを行います。
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");
DataSource
を必要とするコードはそれを使用できます。
DataSourceはベンダー固有です。MySqlの場合、MySql Javaコネクタjarで提供されるMysqlDataSourceを使用できます。
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName("xyz");
dataSource.setUser("xyz");
dataSource.setPassword("xyz");
dataSource.setServerName("xyz.yourdomain.com");
例としてMYSQLを使用:1)データベース接続プールを使用:例:Apache Commons DBCP、また、クラスパスにbasicDataSource jarパッケージが必要
@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)JDBCベースのドライバーを使用します。通常、接続プールを考慮しない場合に使用されます。
@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;
}
この例は間違っていると思います- javax.sql.DataSource
にはこれらのプロパティもありません。 DataSource
はorg.Apache.derby.jdbc.ClientDataSource
型である必要があり、shouldはそれらのプロパティを持っています。
参照するDataSourceのjavadocのパッケージが間違っています。 javax.sql.DataSource をご覧ください。ご覧のとおり、これはインターフェイスです。ホストおよびポート名の構成は、実装、つまり使用しているJDBCドライバーによって異なります。
私はDerbyのjavadocsをチェックしていませんが、コードは次のようにコンパイルするはずです。
ClientDataSource ds = org.Apache.derby.jdbc.ClientDataSource()
ds.setHost etc....