我不明白为啥“java.library.path 中没有 sqljdbc_auth”仍然存在

Posted

技术标签:

【中文标题】我不明白为啥“java.library.path 中没有 sqljdbc_auth”仍然存在【英文标题】:I don't understand why "no sqljdbc_auth in java.library.path" persists我不明白为什么“java.library.path 中没有 sqljdbc_auth”仍然存在 【发布时间】:2017-07-10 09:15:14 【问题描述】:

我正在尝试将 java 程序连接到 SQL Server 数据库。

重要的是我正在使用 Windows 7 机器,我的 Eclipse 在我公司网络上的 Linux 机器上,并且 SQL Server 请求 Windows 身份验证。

我将驱动程序 sqljdbc41.jar 复制并粘贴到我的项目位置(在 Eclipse 上右键单击项目,属性并查看位置)。 我还将 sqljdbc_auth.dll 粘贴在同一位置。 我试图在此帖子之后的“本机库位置”上添加此 .dll 的路径:https://***.com/a/958074/7812989 .但我仍然有这个错误:

    Jul 10, 2017 10:52:35 AM com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
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 integrated authentication. ClientConnectionId:39389d4c-36cd-459f-b9f8-15d3cf422b34
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2397)
    at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<init>(AuthenticationJNI.java:68)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3132)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3123)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1981)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at sqlconnectiontest.SqlSelection.main(SqlSelection.java:19)
Caused by: java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1087)
    at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<clinit>(AuthenticationJNI.java:41)
    ... 13 more

我的代码如下:

    package sqlconnectiontest;

    import java.sql.*;

    public class SqlSelection 

        /**
         * @param args
         */
        public static void main(String[] args) 
            try
            
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

                String userName = "myUser";
                String password = "myPassword";
                String url = "jdbc:sqlserver://fr0-iaascls-190.eu.company.corp:10001;databaseName=MYDATABASE;integratedSecurity=true;";
                Connection con = DriverManager.getConnection(url, userName, password);    
             
            catch (Exception e)
            
                e.printStackTrace();
            

        
    

您有什么想法可以帮上忙吗?谢谢你:)

【问题讨论】:

【参考方案1】:

如果应用程序尝试使用不正确的架构(x86 VS x64)版本的sqljdbc_auth.dll,您可能会收到此错误消息。尝试指定其他架构的目录路径。

如果您在运行 x64 操作系统的 x64 机器上,但您使用的 JVM 是 x86 版本,则需要指定并使用 x86 版本的sqljdbc_auth.dll

【讨论】:

我只是回来补充一个细节。它实际上可以在我安装在我的 Windows 机器上的 Eclipse 中工作,但是当使用我所说的 Eclipse 时,在公司网络上的 Linux 机器上,即使使用良好版本的 sqljdbc_auth.dll,它仍然无法工作。所以最后问题解决了,因为我的 Windows 机器上有一个 Eclipse。 @LaPalme 如果您在 Linux 机器上还有其他问题,您可以再问一个问题,有人会帮助您。 实际上,在我的 Windows 机器上直接安装的另一个 Eclipse 上,我可以通过您的回答解决同样的问题。所以对我来说现在没问题,但我只想对那些阅读这篇文章的人说,对于 Linux 机器上的 Eclipse,正如我的问题中提到的,它仍然不起作用。就是这样:) 谢谢你,祝你有美好的一天

以上是关于我不明白为啥“java.library.path 中没有 sqljdbc_auth”仍然存在的主要内容,如果未能解决你的问题,请参考以下文章

我不明白为啥我的手机没有出现?

我不明白为啥会出现语法错误

元数据已还原,我不明白为啥

功能运行太慢...我不明白为啥

我不明白为啥这个@selector 不起作用

我不明白为啥一个类是“公共的”[重复]