有很多关于将数据库与Knime集成的旧帖子,但我没有发现任何关于Java、Knime和SQL最新版本的讨论。我花了几天时间在这里、StackOverflow和其他地方查看论坛,试图用Knime连接到数据库,但什么都没用。
我的计算机配置如下:64位操作系统Microsoft SQL Server 2017(64位版本)Microsoft SQL Server Management Studio 17用于SQL Server的Microsoft JDBC驱动程序7.0KNIME 3.7.0(64位版本)Java jre1.8.0_191
到目前为止,我已经尝试过:将java版本下载到Program Files\java和Program Files(x86)\java中。目前,我的java版本存储在Program Files目录中,而不是(x86)目录中。
下载并解压缩"sqljdbc_7.0.0.0_enu"JDBC 7.0驱动程序。我还尝试了JDBC 6.0驱动程序,但没有成功。
将sqljdbc_auth.dll放入C:\Program Files\Java\jre1.8.0_191\bin和C:\Program Files\Java \jre11.8.0_191\lib目录中。
在Microsoft SQL Server Management Studio 中启用TCP/IP端口
将Knime的数据库连接器、数据库读取器和Microsoft SQL Server连接器节点配置为以下设置:数据库驱动程序:com.microsoft.sqlserver.jdbc.SQLServerDriver数据库URL:jdbc:sqlserver://(localhost);integratedSecurity=true;身份验证:选中"使用凭据"(对于数据库读取器,此功能被阻止)
当我执行数据库连接器节点时,我会得到以下错误:错误数据库连接器0:2执行失败:无法创建到数据库的连接:java.library.path 中没有sqljdbc_auth
当我执行数据库读取器节点时,我会得到以下错误:错误数据库读取器0:1执行失败:此驱动程序未配置为集成身份验证。客户端连接ID:4906d2f3-e3df-4016-a383-29840cb4dee2
当我执行Microsoft SQL Server连接器时,我会收到以下错误:错误Microsoft SQL Server连接器0:5执行失败:无法创建到数据库的连接:java.library.path 中没有sqljdbc_auth
集成身份验证设置似乎需要额外的设置步骤。我假设您使用的是带有64位JVM的KNIME,所以您应该将C:Microsoft JDBC Driver 6.4 for SQL Serversqljdbc_<version>enuauthx64sqljdbc_auth.dll
复制到C:WindowsSystem32
文件夹中,或者在KNIME.ini中添加以下行(在-vmargs
行之后的某个位置):
-Djava.library.path=C:Microsoft JDBC Driver 6.4 for SQL Serversqljdbc_<version>enuauthx64
(我认为<version>
应该适合您为KNIME设置的JDBC驱动程序。路径可能还需要进一步调整。)
我认为第二个选项是首选的,所以您可以有不同的JDBC驱动程序,但它需要对knime.ini进行调整才能进行所有安装。
Microsoft的JDBC驱动程序似乎更喜欢sqljdbc_auth.dll在WindowsPATH
上可见,以使其可用于与SQL Server实例的可信连接(Windows身份验证)。请确保DLL位于PATH上的文件夹中。
经过多次尝试和错误,以下是我如何通过Windows身份验证解决KNIME JDBC连接到MS SQLExpress的问题。我使用KNIME附带的用于Microsoft SQL Server的jTDS。
选择Microsoft SQL Server连接器节点,并使用以下设置配置该节点:
-
a)主机名=localhost(如果运行远程,请替换为远程服务器的主机名或IP)
-
b) 端口=1433(默认SQL服务器端口)
-
c) 数据库名称=PracticeDB(替换为您希望连接的数据库名称)
-
d) 身份验证:无/本机身份验证
-
在Microsoft SQL Server连接器的JDBC参数选项卡中,添加以下内容:Name的integratedSecurity和true的布尔值
KNIME Microsoft SQL Server连接器将生成必要的JDBC连接字符串:
数据库类型:Microsoft SQL Server连接:URL="jdbc:jtds:sqlserver://localhost:1433/PracticeDB"驱动程序:用于Microsoft SQL Server的jTDS(ID=用于Microsoft SQL服务器的jTDS,版本=1.3.0)