java - 使用 JDBC 连接到 .NET/IKVM 中的 SQL Server

标签 java .net sql jdbc ikvm

我编写了一个 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 位 auth dll 而不是 64 位),并且收到了完全相同的错误,我认为这很奇怪。然后,我从 app.config 中删除了这一行,并收到“无法加载 sqljdbc_auth.dll”警告,并显示“此驱动程序未配置为集成身份验证”。 SQLServerException。

我将数据库连接代码迁移到 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)

所以,我很确定,如果我能让这四行工作,我的问题应该得到解决。有人有什么想法吗?提前致谢!

最佳答案

跟踪发生情况的方法是使用 Java Throwable.printStackTrace() 方法打印异常(到控制台)。这样您就可以找到根本原因。

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

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

关于java - 使用 JDBC 连接到 .NET/IKVM 中的 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12736839/

相关文章:

.net - 64 位 .NET Informix ADO.NET 提供程序的程序集加载错误

c# - 使用 System.Transactions 时保存点的替代方法

java - ant 从 lib 构建缺少的 jar

Java JTable 不显示 MySQL 中的所有行

java - 这是将 MVC 用于多个 View 的好方法吗?

mysql - Django 按相关模型字段排序查询集

PHP MySQL 选择多个条件

java - 如何在 jsp 应用程序中引用外部 jar?

.net - NuGet 和 Git 子模块

php - 找不到类 'Illuminate\Notifications\NotificationServiceProvider'