2017-01-07 4 views
0

せずに作業マニュアルはそうダービーEmbeddedDriver Class.forNameの

Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); 

https://db.apache.org/derby/papers/DerbyTut/embedded_intro.html

のようなJDBCドライバをロードするように教えてくれる。しかし、それは

connection = DriverManager.getConnection("jdbc:derby:" + pathDerby + ";create=true"); 

すぐに接続を取得せずに正常に動作し、何故ですか?

ログからのバージョン:ブートダービーのバージョンは、Apache Software Foundation - Apache Derbyを - 10.13.1.1 - (1765088)

EDIT:あなたはダービーエンジンをシャットダウンした場合

実際にそれが必要とされますそして

DriverManager.getConnection("jdbc:derby:;shutdown=true"); 
012をシャットダウンした後

(私は統合テストでは、このすべての時間を行う)と同じJWMプロセスで再びそれを開きたいです

あなたはofficial documentationからこの

Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); 
connection = DriverManager.getConnection("jdbc:derby:" + pathDerby + ";create=true"); 
+0

Derbyの問題追跡ツールでいくつかのジョブを集めて、古い文書を削除/改訂することができます。 –

答えて

2

のように再度開く必要があります。

のDriverManagerメソッドのgetConnectionとgetDriversは、Java Standard Editionのサービスプロバイダーのメカニズムをサポートするように拡張されました。 JDBC 4.0ドライバには、META-INF/services/java.sql.Driverファイルが含まれている必要があります。このファイルには、java.sql.DriverのJDBCドライバ実装の名前が含まれています。例えば、my.sql.Driverクラスをロードするために、META-INF /サービス/に、java.sql.driverファイルにエントリが含まれます:

アプリケーションはもはやに必要

my.sql.Driver明示的にClass.forName()を使用してJDBCドライバをロードします。 Class.forName()を使用してJDBCドライバを現在ロードしている既存のプログラムは、修正を行わずに引き続き動作します。

+0

@Stig:私の意見では、この「シャットダウン接続」は、 'getConnection()'インタフェースの乱用です。なぜデータベースをシャットダウンするために接続をオープンするのですか? DriverManagerは決してデータベースのライフサイクルを管理するつもりはありませんでした(サーバー) –

+1

が同意しますが、これはDerbyの実装方法です。 :) – Stig

関連する問題