带有实例名称和域的 JDBC 连接字符串

Posted

技术标签:

【中文标题】带有实例名称和域的 JDBC 连接字符串【英文标题】:JDBC connection string with instance name and domain 【发布时间】:2016-11-26 15:49:35 【问题描述】:

我在 SQL Server 中创建了一个具有以下配置的数据库:

另外,我正在尝试连接到名为 EDS 的数据库。

为此,我创建了以下详细信息:

我应该在字符串中包含域还是应该在用户名中? 当我转到数据库属性时,我看到所有者拥有。 另外,根据图像,实例部分的 url 是否正确?看起来它无法转到该特定实例。

另外,这是连接的配置(使用 Windows Authenticaton)

当我输入用户名时,我收到以下错误日志:

com.microsoft.sqlserver.jdbc.SQLServerException: 用户登录失败。 ClientConnectionId:e812971f-b03c-4210-9dbd-de0791bcc304

【问题讨论】:

如果您想使用实例名称进行连接,那么您不应包含端口号,因为 SQL Browser 服务会为您解决这个问题。此外,SQL Express 实例没有侦听端口 1433 的可能性也很大。(默认情况下,SQL Express 实例侦听 40000+ 范围内的任意端口号。) 我将 SQLEXPRESS01 配置为侦听该端口。所以我应该删除连接字符串上的实例并只使用端口?有道理@GordThompson 如果您自己配置了端口 1433,那么是的,您只需要主机名和端口号即可。 如果您想使用您的 Windows 凭据登录 SQL Server,那么您可以将 ;integratedSecurity=true 添加到您的连接 URL 中,而无需传递用户名和密码。 @GordThompson 我知道驱动程序不支持这种身份验证,但我使用的是最新的 sqljdbc42.. 【参考方案1】:

在指定 SQL Server 实例的位置时,通常提供serverName\instanceName serverName:portNumber,而不是两者。也就是说,要么

jdbc:sqlserver://INNOWAVE-99\SQLEXPRESS01;databaseName=EDS

jdbc:sqlserver://localhost:1433;databaseName=EDS

(假设 SQLEXPRESS01 实例已被显式配置为侦听端口 1433,而 SQL Express 实例通常不是这种情况)。

如Building the Connection URL 的文档中所述

如果同时使用 portNumber 和 instanceName,则 portNumber 将优先,instanceName 将被忽略。

没有为 Microsoft 的 SQL Server JDBC 驱动程序的连接 URL 定义 domain= 属性。使用 Windows 域凭据登录到 SQL Server 实例是使用 integratedSecurity=true 连接属性隐式完成的(并且显式提供用户名和密码);详情here.

【讨论】:

谢谢,删除端口号让它为我工作(在 Spotfire 中)。 删除 portNumber 也适用于 Payara 连接池定义。谢谢。 有没有人尝试过使用 spark 与 sql server express 连接? 不要忘记 jdbc:sqlserver://192.169.52.105\\SQLEXPRESS;databaseName=icamdb 如果你在 springboot application.properties 中存储双斜杠【参考方案2】:

我也遇到了同样的问题。没有端口号也为我工作。 不要忘记在连接结束时加分号。

使用集成身份验证连接到本地计算机上的默认数据库:

jdbc:sqlserver://localhost;integratedSecurity=true;

连接到远程服务器上的命名数据库:

jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;

使用默认端口连接到远程服务器:

jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;integratedSecurity=true;

通过指定自定义应用程序名称进行连接:

jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;applicationName=MyApp;

参考链接:mssql document

【讨论】:

我不同意你的看法。我刚刚删除了结尾的分号,我的问题就消失了。

以上是关于带有实例名称和域的 JDBC 连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

带有 JSP 的 JDBC 连接字符串 SQL Server 导致“非法转义字符”错误

带有忽略大小写的 JDBC URL 不适用于 H2 数据库连接

带有自定义模式的 jdbc redshift 连接字符串

文件路径上带有空格的 JDBC 连接字符串(sqlite、hsqldb)

SQL Server 集群的 JDBC 连接字符串

连接到 SQL Server 实例 AWS Glue