Nos*_*een 31 java sql-server jdbc ioerror
我正在尝试运行以下代码:
import java.sql.DriverManager;
public class Connect {
public static void main(String[] args){
try{
String databaseDriver = "net.sourceforge.jtds.jdbc.Driver";
Class.forName(databaseDriver);
}
catch (Exception e) {
e.printStackTrace();
}
try{
String url = "jdbc:jtds:sqlserver://BHX:1433/Forecast;instance=SQLEPXRESS";
java.sql.Connection con = DriverManager.getConnection(url);
System.out.println("Connection");
}
catch (Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的SQL服务器在机器BHX上的端口1433上运行.
我得到的错误信息如下:
java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:615)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:352)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:185)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Connect.main(Connect.java:14)
Caused by: java.io.IOException: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.
at net.sourceforge.jtds.jdbc.TdsCore.sendMSLoginPkt(TdsCore.java:1893)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:588)
... 6 more
Run Code Online (Sandbox Code Playgroud)
我已经阅读了为什么这种情况经常发生并在这里发现了类似的问题,但这似乎不起作用.运行代码时,我已经包含以下参数来查找SSO文件:
-Djava.library.path=/Tester/jdbc/x64/SSO
Run Code Online (Sandbox Code Playgroud)
这是我的文件的结构
**Tester**
*src*
default package
Connect.java
*JRE System Library*
*jdbc*
conf
html
IA64
x64
SSO
ntlmauth.dll
x86
Run Code Online (Sandbox Code Playgroud)
你能发现什么错吗?
Rob*_*mar 64
看起来像这个问题一样:jtds-driver-not-working-for-sql-sever-2008r2-and-denali-native-sspi-library-not
您应该将相应的ntlmauth.dll文件从JTDS下载包中删除到您的JRE bin文件夹中.
如果您在64位Windows机器上运行:
这个32位DLL:
下载>>> jtds-1.3.0-dist.zip >>> x86 >>> SSO >>> ntlmauth.dll
在这个32位JRE位置到这里:
C:\ Program Files(x86)\ Java\jre7\bin
这个64位DLL:
下载>>> jtds-1.3.0-dist.zip >>> x64 >>> SSO >>> ntlmauth.dll
在这个64位JRE位置到这里:
C:\ Program Files\Java\jre7\bin
如果您在32位Windows机器上运行:
这个32位DLL:
下载>>> jtds-1.3.0-dist.zip >>> x86 >>> SSO >>> ntlmauth.dll
在这个32位JRE位置到这里:
C:\ Program Files\Java\jre7\bin
如果这不起作用,请尝试在main方法的顶部添加此行:
System.out.println(java.lang.System.getProperty('java.library.path'));
它应该输出程序使用的实际JRE路径.确保相应的ntlmauth.dll位于该JRE的bin文件夹中.
注意:使用此方法时,请勿设置连接的域,用户或密码属性.
注意:如果您的Java客户端程序在非Windows机器上运行,那么使用ntlmauth.dll方法是不合时宜的.这是JTDS下载包附带的文档中的引用:下载>>> jtds-1.3.0-dist.zip >>> README.SSO
从版本0.9.2开始,jTDS能够使用运行客户端程序的帐户下的当前用户的Windows凭据登录到SQL Server(Windows Single Sign On).
使用Windows Single Sign On(SSO)客户端将能够在不提供凭据的情况下连接到Microsoft SQL Server.它将动态读取当前用户的凭据并连接到数据库.前提是Windows帐户在数据库中具有足够的权限.这是使用本机(仅限Windows)库ntlmauth.dll完成的.
我有一个类似的问题,我试图将ntlmauth.dll
文件放在尽可能多的目录中,我认为sql-developer会去寻找它.我终于通过将ntlmauth.dll
文件放在\jdk\jre\bin
sql-developer应用程序目录本身的文件夹中来实现它(即sql-developer\jdk\jre\bin
).为什么sql-developer会在这个文件夹中查找ntlmauth.dll,而不是系统文件夹超出我的理解水平.无论如何,它奏效了.
以下是我刚才回答的类似问题的链接.
Oracle SQL Developer与Microsoft SQL Server的连接
小智 6
即使成功将 ntmauth.dll 文件放入 JRE/bin 中,我也会遇到相同的错误。
然后我尝试放入目录ntmauth.dll
中C:\Windows\System32
。通过这样做,问题得到了解决。
归档时间: |
|
查看次数: |
70716 次 |
最近记录: |