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的主要内容,如果未能解决你的问题,请参考以下文章