0

我编写了一个 Java 包,它使用 JDBC 和集成安全性连接到 SQL Server 数据库。这个包按照我的 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(使用 32 位身份验证 dll 而不是 64 位),我收到了完全相同的错误,我认为这很奇怪。然后我从 app.config 中删除了这一行,并收到“无法加载 sqljdbc_auth.dll”警告,并显示“此驱动程序未配置为集成身份验证”。SQLServer 异常。

我将数据库连接代码迁移到 VB.NET/IKVM 中,并使用以下四行重新创建了原始错误:

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

1 回答 1

1

跟踪正在发生的事情的方法是使用 Java Throwable.printStackTrace() 方法打印异常(到控制台)。这样你就得到了根本原因。

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

我的猜测是 tThis 将表明问题在于您忘记将 ikvm-native-win32-x86.dll(或 ikvm-native-win32-x64.dll)复制到您的应用程序目录。

于 2012-12-02T07:34:06.053 回答