java.lang.UnsatisfiedLinkError:java.library.path中没有sqljdbc_auth

时间:2014-05-30 08:09:00

标签: java sql

我创建了一个java应用程序的.jar,当我尝试从cmd运行.jar时,我收到错误。

我一直在寻找并找到很多例子,但没有人为我工作。 我将java.library.path设置为目录'sqljdbc_auth.dll',就像我在这里看到的那样,但错误是连续的。

http://www.linglom.com/images/howto/netbeans/sqlserver/part3/8.png

我用命令运行我的java应用程序:java -Djava.library.path =“my dll path”并给出:

PS C:\Users\User> java -Djava.library.path="C:\Users\User\Desktop\Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc
_4.0\ptb\auth\x64"
Error: Could not find or load main class .library.path=C:\Users\User\Desktop\Microsoft JDBC Driver 4.0 for SQL Server
\sqljdbc_4.0\ptb\auth\x64

我真的不知道如何解决这个问题。 我一直在寻找很多时间,但没有任何作用。请有人帮助我。

感谢

 WARNING: Failed to load the sqljdbc_auth.dll cause : no sqljdbc_auth in java.library.path
com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrat
ectionId:0481a2ee-4ac4-4fd3-89cd-58aad1696fe4
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.j
        at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<init>(AuthenticationJNI.java:60)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.
        at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServe
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnect
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnecti
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.jav
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at test.database.Conection.getConexao(Conection.java:41)
        at test.forms.jTLogin.<init>(jTLogin.java:71)
        at test.forms.jTLogin$4.run(jTLogin.java:448)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$400(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<clinit>(AuthenticationJNI.java:3
        ... 28 more

4 个答案:

答案 0 :(得分:8)

搞定了......

1)在Java / JDK / bin中添加.dll和.jar

2)在applications / lib

中添加了.jar

3)在windows / system32中添加.dll

在“Path”系统环境中添加java / jdk ../ bin和windows / system32。

答案 1 :(得分:3)

经过一整个沮丧的早晨,我终于开始工作了,我需要做的就是@ user3320956的第一个建议。

我将sqljdbc_auth.dll添加到我的JDK \ bin目录(在我的情况下是C:\ Program Files \ Java \ jdk1.7.0_79 \ bin)中,我的CLASSPATH中唯一的东西是

C:\Program Files\Microsoft JDBC Driver 4.1 for SQL Server\sqljdbc_4.1\enu\sqljdbc41.jar 

之后,只要我没有使用-cp或-classpath变量,我就可以在我的课程中使用这个语句:

import com.microsoft.sqlserver.jdbc.*;

并连接到远程数据库。这是我的连接字符串(当然,替换SERVERNAME和DBNAME,确保您拥有权限,确保您的服务器设置为接受TCP / IP连接等):

jdbc:sqlserver://SERVERNAME;database=DBNAME;integratedSecurity=true;authenticationScheme=NativeAuthentication;

HTH!

干杯,

马修

答案 2 :(得分:2)

如果您不需要&#34;集成安全性&#34;您可以使用url中的参数将其关闭:

integratedSecurity=false;

这应该适合开发,但也可能适用于某些生产环境。

答案 3 :(得分:0)

我遇到与OP相同的问题,但我无法根据user3320956的回复来解决问题。

我正在使用Intellij Idea,我发现我能够通过更改创建.jar的方法来解决这个问题。 &#34;提取到目标JAR&#34;方法是我以前使用的方法,并给了我OP描述的完全相同的问题。我已经将此方法更改为&#34;尝试复制到输出目录并通过清单&#34;创建Jar&#34;我不再收到错误&#34;错误:无法找到或加载主类&#34;。

希望这有助于挽救陷入困境的人们一些头疼的事情!