JDBC 中缺少 dll

Posted

技术标签:

【中文标题】JDBC 中缺少 dll【英文标题】:dll missing in JDBC 【发布时间】:2013-06-21 01:11:53 【问题描述】:

我目前正在使用 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 添加到我的构建路径中?有什么特别的方法吗?

【问题讨论】:

afaik 你需要将 dll 的路径添加到 Windows 属性 PATH 中 【参考方案1】:

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

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

    使用 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
    

    在配置属性中移除 Hikari。

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

    添加 sqljdbc4 依赖。

    com.microsoft.sqlserver sqljdbc4 4.0

    添加 Tomcatjdbc 依赖。

    org.apache.tomcat tomcat-jdbc

    从 spring-boot-starter-jdbc 依赖项中排除 HikariCP。

    org.springframework.boot spring-boot-starter-jdbc com.zaxxer 光CP

【讨论】:

【参考方案2】:

为方便修复,请按照以下步骤操作:

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

重启 eclipse 或 netbeans

【讨论】:

或者,仅复制到 C:\Windows\System32 文件夹也可以。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

sqljdbc_auth.dll保存在您的windows/system32文件夹中,它将起作用。从link下载sqljdbc驱动程序解压缩它,您将找到sqljdbc_auth.dll。现在将sqljdbc_auth.dll保存在system32文件夹中并运行您的程序

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

【参考方案8】:

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

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

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

如果您使用 Eclipse,请查看 SO post,如果您想以编程方式设置,请查看 this blog。

【讨论】:

谢谢!上面的描述不是很清楚,我认为你可以稍微编辑一下。作为回报,您对***.com/questions/957700/… 的链接对我帮助很大!这是我找到问题答案的地方【参考方案9】:

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

【讨论】:

您能说得更具体些吗?我不知道该怎么做【参考方案10】:

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

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

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

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

【讨论】:

以上是关于JDBC 中缺少 dll的主要内容,如果未能解决你的问题,请参考以下文章

缺少libpng12.dll怎么办

windows 10 wps缺少dll文件

缺少 dll 功能检测

模块窗口中缺少一些 DLL

电脑缺少msvcp140,dll解决办法

PHP 7:缺少 VCRUNTIME140.dll