2

現在MSSQLServer 2000データベースに接続している小さなJavaプロジェクトに取り組んでいますが、まもなくMS SQLServer2005データベースに接続する予定です。展開を容易にするために、単一のjarを作成しています。構成ファイルを変更してドライバーを変更できるようにセットアップしようとしていました(.NETの場合と同じように)。ただし、JavaのJar埋め込みクラスパスの制限、および埋め込みクラスパス(1)にワイルドカード文字がないためです。すべてのドライバーjarを明示的に参照せずにこの問題を回避する方法はありますか?それを行う必要がある場合は、データベースが変更されるたびに再コンパイルする必要があります...

(1):ただし、Class-Pathjar-manifestヘッダーではクラスパスワイルドカードは使用されません。

4

4 に答える 4

2

通常、実行時にクラスパスを変更できます。このようなアプローチは、Javaで「プラグイン」タイプのjarを処理する一般的な方法です(あなたの場合と非常によく似た要件です)。

于 2009-08-26T14:43:19.420 に答える
0

使用するドライバーに関する情報を構成ファイルなどに含めることができます。または、JARファイル自体のマニフェスト。アプリケーションの起動時にすべてのJARファイルを含めるだけですが、構成からドライバーの名前をロードします。

于 2009-08-26T14:26:04.410 に答える
0

デプロイしているのと同じJarにサードパーティのコードを含めるのは(標準的な方法のように)Javaの方法ではないと思います。ただし、jarは単なるzipファイルであるため、ほとんどの場合(マニフェストで行われているいくつかの凝ったものを除く)、必要に応じてそれらを組み合わせることができます。

そうは言っても、jarファイルにすべての潜在的なJDBCドライバーjarへのクラスパス参照を含めるか、JDBCドライバーjarを正しい方法で呼び出すことができます。次に、同じディレクトリに構成ファイルを置き(JARのクラスパスに必ず.を含めます)、そこからドライバー名を読み取り、Class.forName()を使用してドライバーをロードします。

より凝ったことを行うことができます(実行時に適切なjarを見つけて、クラスパスにない場合でも動的にロードするなど)が、それらは少し複雑なので、上記のような単純なものが機能するはずです。

再コンパイルする必要はありません。ドライバーを変更するときに再コンパイルする必要がある場合は、JDBCを正しく実行していません。

于 2009-08-26T14:29:39.817 に答える
0

特定のプロバイダーのドライバーjarファイルとJDBCドライバーの実際の名前を分離する必要があります。

自分のjarにjdbcドライバーjarを含めないことを強くお勧めします。実行時のパスへのちょうどそれらで。同様に、JDBCドライバーマネージャーの名前は、実行時にシステムプロパティから取得することも、構成ファイルから取得することもできます。

したがって、次のようなアプリを実行します。

java -jar myapp.jar -cp sqlserver.jar -DdriverManager=com.microsoft.sqlserver.jdbc.SQLServerDriver -DdbUrl=jdbc:some:url

そしてあなたのアプリケーションで、このようなことをしてください(私は例外処理を省略します):

Class.forName(System.getProperty("driverManager"));
Connection conn = DriverManager.getConnection(System.getProperty("dbUrl"))

;

このように、適切なjarファイルをクラスパスに追加し、driverManagerプロパティとdbUrlプロパティを変更するだけで、ドライバーを変更できます。このように、新しいドライバーをサポートするために再コンパイルする必要はありません。

それは私が考えることができる最も簡単な解決策です。

于 2009-08-26T14:42:08.127 に答える