【问题标题】:java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.pathjava.lang.UnsatisfiedLinkError:java.library.path 中没有 sqljdbc_auth
【发布时间】:2014-05-30 08:09:00
【问题描述】:

我为我的 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

【问题讨论】:

  • 打开 SQL Server 错误日志以查看用户如何尝试登录数据库实例:C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Log

标签: java sql


【解决方案1】:

搞定了……

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

2) 在 applications/lib 中添加 .jar

3) 在 windows/system32 中添加 .dll

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

【讨论】:

    【解决方案2】:

    如果您不需要“集成安全性”,您可以使用 url 中的参数将其关闭:

    integratedSecurity=false;
    

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

    【讨论】:

      【解决方案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!

      干杯,

      -马修

      【讨论】:

        【解决方案4】:

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

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

        希望这有助于让陷入我困境的人们免于头疼!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-19
          • 2020-06-29
          • 2017-06-27
          • 2016-08-29
          • 2012-07-16
          • 2016-11-10
          • 2020-05-04
          相关资源
          最近更新 更多