带有实例名称和域的 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 数据库连接