47

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)私が理解できるcom.mysql.jdbca に関する文書、またはDataSource

2) 任意のデータベースについて、チュートリアルのコードがどうあるべきかについて従うべき例を示します。

4

7 に答える 7

130

あなたが見たいと思うかもしれない1つのことはコモンズDBCPプロジェクトです。これは、例とほぼ同じように構成されたBasicDataSourceを提供します。これを使用するには、クラスパスにデータベースベンダーのJDBC JARが必要であり、ベンダーのドライバークラス名とデータベースURLを適切な形式で指定する必要があります。

編集:

BasicDataSourceMySQL用にを構成する場合は、次のようにします。

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はそれを使用できます。

于 2009-08-26T19:30:51.177 に答える
23

基本的に 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 がサポートするプロパティについては、こちらを参照してください。

編集: クラスにはバージョンを登録する独自の静的初期化子が必要なため、技術的には Class.forName("com.mysql.jdbc.Driver") を実行するコード行を持つだけで十分なはずです。 JDBC ドライバーはそうではないので、よくわからない場合は、2 つ目のドライバーを登録しても問題はほとんどありません。メモリ内に重複したオブジェクトが作成されるだけです。

于 2009-08-26T19:53:23.033 に答える
7

例として 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;
}
于 2017-03-10T13:59:55.850 に答える
2

例は間違っていると思います-javax.sql.DataSourceこれらのプロパティもありません。タイプはであるDataSource必要があり、これらのプロパティが必要です。org.apache.derby.jdbc.ClientDataSource

于 2009-08-26T19:26:52.480 に答える
1

あなたが参照している DataSource の javadoc は、間違ったパッケージのものです。javax.sql.DataSourceを見る必要があります。ご覧のとおり、これはインターフェイスです。ホスト名とポート名の構成は、実装、つまり使用している JDBC ドライバーによって異なります。

Derby の Javadoc は確認していませんが、コードは次のようにコンパイルされるはずです。

ClientDataSource ds = org.apache.derby.jdbc.ClientDataSource()
ds.setHost etc....
于 2009-08-26T19:18:13.433 に答える