22

我目前正在使用 Java 中的 SQL。最近我收到了这个错误:

com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
WARNING: Failed to load the sqljdbc_auth.dll cause : no sqljdbc_auth in java.library.path

当我integratedSecurity=true;在连接字符串中添加参数时会发生这种情况。错误信息清楚地表明缺少 sqljdbc_auth.dll,所以我尝试将 dll 放在与我保留 sqljdbc4.jar 相同的路径中。

但是,这不起作用,所以我想知道如何将这个 dll 添加到我的构建路径中?有什么特殊的方法可以做到吗?

4

10 回答 10

42

保存在您的 windows/system32 文件夹中,它将工作。从此链接sqljdbc_auth.dll下载sqljdbc 驱动程序解压缩它,您会找到。现在保留里面的 system32 文件夹并运行您的程序sqljdbc_auth.dllsqljdbc_auth.dll

于 2013-10-01T12:25:07.983 回答
11

为了便于修复,请按照下列步骤操作:

  1. 转到:https ://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url#Connectingintegrated
  2. 下载 JDBC 文件并解压到您的首选位置
  3. 打开与您的操作系统 x64 或 x86 匹配的 auth 文件夹
  4. 复制 sqljdbc_auth.dll 文件
  5. 粘贴到:C:\Program Files\Java\jdk_version\bin

重新启动 eclipse 或 netbeans

于 2017-09-27T00:05:17.330 回答
10

好吧,伙计们,我发现了!我真的不需要更改 java.library.path 而是 sqljdbc.jar 的“本机库位置”

这是我能找到的最佳答案: https ://stackoverflow.com/a/958074/2000342

现在可以用了,谢谢支持!

于 2013-06-25T07:56:34.070 回答
4

您需要设置一个名为 -D 的系统属性java.library.path,该属性指向包含sqljdbc_auth.dll.

于 2013-06-24T13:47:25.000 回答
4

将 java.library.path 设置为包含 Java 用来查找本机库的此 DLL 的目录。在命令行上指定 -D 开关

java -Djava.library.path=C:\Java\native\libs YourProgram

C:\Java\native\libs 应该包含 sqljdbc_auth.dll

如果您使用 Eclipse,请查看此SO 帖子;如果您想以编程方式设置,请查看此博客。

于 2013-06-24T13:55:33.077 回答
2

如果是 dll 文件丢失的情况,您可以从此链接 http://en.osdn.jp/projects/sfnet_dose-grok/downloads/sqljdbc_auth.dll/下载 dll 文件

否则您需要提供您尝试连接的数据库的用户名和密码,并将身份验证设置为 false

于 2015-10-28T12:25:52.943 回答
2

在我的情况下,在这个问题上花了很多天之后,下面这个问题的绅士帮助是解决方案,它对我有用。 问题: 尝试使用 Spring Boot 将 SqlServer DB 与服务帐户身份验证连接时,它会引发以下异常。

com.microsoft.sqlserver.jdbc.SQLServerException:此驱动程序未配置为集成身份验证。ClientConnectionId:ab942951-31f6-44bf-90aa-7ac4cec2e206 at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2392) ~[mssql-jdbc-6.1.0.jre8.jar!/:na] : java.lang.UnsatisfiedLinkError: sqljdbc_auth (Not found in java.library.path) at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1462) ~[na:2.9 (04-02-2020)] 解决方案:使用 JTDS驱动程序与以下步骤

  1. 使用 JTDS 驱动程序而不是 sqlserver 驱动程序。

    ----------------- 使用 JTDS 的专用 Pick 更新属性 PROD ----------------

    datasource.dedicatedpicup.url=jdbc:jtds:sqlserver://YourSqlServer:PortNo/DatabaseName;instance=InstanceName;domain=DomainName
    datasource.dedicatedpicup.jdbcUrl=${datasource.dedicatedpicup.url}
    datasource.dedicatedpicup.username=$da-XYZ
    datasource.dedicatedpicup.password=ENC(XYZ)
    datasource.dedicatedpicup.driver-class-name=net.sourceforge.jtds.jdbc.Driver
    
  1. 在配置属性中删除 Hikari。

    #datasource.dedicatedpicup.hikari.connection-timeout=60000 #datasource.dedicatedpicup.hikari.maximum-pool-size=5

  2. 添加 sqljdbc4 依赖项。

    com.microsoft.sqlserver sqljdbc4 4.0
  3. 添加 Tomcatjdbc 依赖项。

    org.apache.tomcat tomcat-jdbc
  4. 从 spring-boot-starter-jdbc 依赖项中排除 HikariCP。

    org.springframework.boot spring-boot-starter-jdbc com.zaxxer HikariCP
于 2021-02-24T20:49:47.667 回答
0

您必须确保您的 DLL 在类路径中。

这样做的一种方法是将 DLL 的路径放在 PATH 环境变量中。

其他选项是将其添加到变量 LD_LIBRARY_PATH 中的 VM 参数中,如下所示:

java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass

于 2013-06-24T13:47:02.297 回答
0

朋友我有同样的问题,因为不同的位版本确保以下几点 * 您的 jdk 位 64 或 32 * 您的 sqljdbc_4.0\enu\auth\x64 或 x86 的路径 此目录取决于您的 jdk 位 * sqljdbc_auth.dll 选择此文件基于您的 x64 或 x86 位并将其放在 system32 文件夹中,它将适用于我

于 2016-01-19T05:22:43.797 回答
0

sqljdbc_auth.dll 位于您安装的 sqljdbc_x.x 文件夹中,以检索 auth 文件夹中的 sqljdbcxx.jar 文件。在 scala 项目的基础上创建一个 lib 文件夹,并将 sqljdbc_auth.dll 移动到此文件夹中。这可确保您获得正确的文件,例如与您的 sqljdbcxx.jar 文件匹配的 64 位或 32 位。

于 2017-07-21T12:03:48.787 回答