有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

通过动态TCP端口与SQL server的java JDBC连接

我的sql server引擎使用动态TCP端口,例如52358。如果我在JDBC DB url连接字符串中指定了端口号52358,那么我可以毫无问题地进行JDBC查询,即

jdbc:sqlserver://serverName:52358;databaseName=myDB

但是,由于这是动态端口,如果下次重新启动sql server后该端口(52358)不可用,sql server可能会选择另一个端口

那么,在连接字符串中配置我的DB URL的最佳方法是什么


我尝试过的方法

省略端口号,只使用实例名,即

jdbc:sqlserver://serverName;databaseName=myDB

这不管用。顺便说一下,sql server浏览器服务已经启用


找到解决方案(感谢Gord Thompson)。DB URL的complete form是:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

其中portNumber或instanceName可用于连接到serverName。然而

If both a portNumber and instanceName are used, the portNumber will take precedence and the instanceName will be ignored.

因此,对于动态端口,我们应该只使用instanceName进行连接,并保持SQL Browser服务运行(SQL Server提供SQL Server Browser Service,以监视端口,并将传入连接定向到该实例的当前端口)。因此,在我的例子中,正确的形式是:

jdbc:sqlserver://serverName\instanceName;databaseName=myDB

此外,我们应该记住

For optimal connection performance, you should set the portNumber when you connect to a named instance. This will avoid a round trip to the server to determine the port number

然后这将调用一个静态端口号


共 (0) 个答案