0

JDBC と統合セキュリティを使用して SQL Server データベースに接続する Java パッケージを作成しました。このパッケージは、Java IDE から意図したとおりに実行されます。現在、IKVM を使用して別の .NET アプリからこのパッケージのいくつかのクラスにアクセスしようとしています。

ただし、現在、.NET アプリで ExceptionInInitializerError が発生しています。スタック トレースは、データベース接続の初期化中にこのエラーが発生したことを示しています。

以下を使用して、.NET アプリ用の app.config ファイルを作成し、JDBC ドライバーを Java ライブラリ パスに追加します。

<add key="ikvm:java.library.path" value="C:\Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\enu\auth\x64"/>

\x64 を \x86 に変更しようとしましたが (64 ビットではなく 32 ビットの認証 dll を使用)、まったく同じエラーを受け取りましたが、これは奇妙だと思いました。次に、app.config からこの行を削除したところ、「このドライバーは統合認証用に構成されていません」という「sqljdbc_auth.dll の読み込みに失敗しました」という警告が表示されました。SQL サーバー例外。

データベース接続コードを VB.NET/IKVM に移行し、次の 4 行を使用して元のエラーを再現しました。

Dim connectionUrl As String = "jdbc:sqlserver://db\instance;integratedsecurity=true"
Dim driver As String = "com.microsoft.sqlserver.jdbc.SQLServerDriver"     
java.sql.DriverManager.registerDriver(New com.microsoft.sqlserver.jdbc.SQLServerDriver())
Dim dbConn As java.sql.Connection = java.sql.DriverManager.getConnection(connectionUrl)

したがって、これらの 4 つの行を機能させることができれば、問題は解決されるはずです。誰にもアイデアはありますか?前もって感謝します!

4

1 に答える 1

1

何が起こっているかを追跡する方法は、Java Throwable.printStackTrace()メソッドを使用して例外を(コンソールに)出力することです。そうすれば、根本的な原因を知ることができます。

Try
   ...
Catch x as java.lang.ExceptionInInitializerError
   x.printStackTrace()
End Try

私の推測では、これは、問題がikvm-native-win32-x86.dll(またはikvm-native-win32-x64.dll)をアプリケーションディレクトリにコピーするのを忘れたことを示していると思います。

于 2012-12-02T07:34:06.053 に答える