创建jTDS连接字符串

Omu*_*Omu 52 java connection-string jtds jdbc

我的sql server实例名是MYPC\SQLEXPRESS,我正在尝试创建一个jTDS连接字符串来连接数据库'Blog'.有人可以帮我完成吗?

我想这样做:

DriverManager.getConnection("jdbc:jtds:sqlserver://127.0.0.1:1433/Blog", "user", "password");
Run Code Online (Sandbox Code Playgroud)

我明白了

 java.sql.SQLException: Network error IOException: Connection refused: connect
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:395)
    at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at SqlConnection.Connect(SqlConnection.java:19)
    at main.main(main.java:11)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:305)
    at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:255)
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:323)
    ... 6 more
Run Code Online (Sandbox Code Playgroud)

Pas*_*ent 113

如jTDS Frequenlty Asked Questions中所述,jTDS 的URL格式为:

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]
Run Code Online (Sandbox Code Playgroud)

因此,要连接到由运行的MS SQL Server托管的名为"Blog"的数据库MYPC,您最终可能会遇到以下情况:

jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS;user=sa;password=s3cr3t
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢使用getConnection(url, "sa", "s3cr3t"):

jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS
Run Code Online (Sandbox Code Playgroud)

编辑:关于您的Connection refused错误,请仔细检查您是否在端口1433上运行SQL Server,该服务正在运行,并且您没有阻止传入连接的防火墙.

  • 在我的sql server配置管理器中的SQLEXPRESS协议中启用了一些tcp后,您的上一个连接字符串是否正常工作 (4认同)
  • 谢谢队友,第一个为我使用SQL SERVER 2000工作 (2认同)
  • 为数据源添加一个“实例”属性,并且不要将该实例添加到“数据库名称”中。 (2认同)
  • 谢谢。在尝试将其配置为使用 Windows 身份验证时,这对我有用: jdbc:jtds:sqlserver://[servername]:1433/[DBName];domain=[DomainName];user=[username];password=[password ] (2认同)
  • 7年后,这篇文章帮了我大忙。查找sql​​服务器IP的提示:在凭据之前使用“ tcp:”登录,然后运行以下查询:SELECT c.local_net_address FROM sys.dm_exec_connections AS c WHERE c.session_id = @@ SPID; (2认同)

acd*_*ior 39

真的,真的,真的,检查你的本地SQLEXPRESS实例是否启用了TCP/IP协议.

请按照以下步骤确保:

  • 在"开始菜单\程序\ Microsoft SQL Server 2012 \配置工具"中打开" Sql Server配置管理器 "
  • 展开"SQL Server网络配置"
  • 进入"SQLEXPRESS的协议"
  • 启用TCP/IP

如果您有任何问题,请查看此博客文章了解详细信息,因为它包含屏幕截图和更多信息.

还要检查"SQL Server Browser"窗口服务是否已激活并运行:

  • 转到"控制面板" - >"管理工具" - >"服务"
  • 打开"SQL Server Browser"服务并启用它(手动或自动,取决于您的需要)
  • 启动它.

而已.

在我安装了一个全新的本地SQLExpress后,我所要做的就是启用TCP/IP并启动SQL Server Browser服务.

在我用来测试SQLEXPRESS本地连接的代码下面.当然,您应该根据需要更改IP,DatabaseName和用户/密码:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JtdsSqlExpressInstanceConnect {
    public static void main(String[] args) throws SQLException {
        Connection conn = null;
        ResultSet rs = null;
        String url = "jdbc:jtds:sqlserver://127.0.0.1;instance=SQLEXPRESS;DatabaseName=master";
        String driver = "net.sourceforge.jtds.jdbc.Driver";
        String userName = "user";
        String password = "password";
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, userName, password);
            System.out.println("Connected to the database!!! Getting table list...");
            DatabaseMetaData dbm = conn.getMetaData();
            rs = dbm.getTables(null, null, "%", new String[] { "TABLE" });
            while (rs.next()) { System.out.println(rs.getString("TABLE_NAME")); }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            conn.close();
            rs.close();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用Maven,请将其添加到您的pom.xml:

<dependency>
    <groupId>net.sourceforge.jtds</groupId>
    <artifactId>jtds</artifactId>
    <version>1.2.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • 并确保您使用的是“静态端口= 1433”,而不是“ IP全部”设置下的动态端口。 (2认同)
  • 哇,“SQL Server 浏览器”为我做到了这一点,最后非常感谢。谁能解释一下这是做什么的? (2认同)

Cou*_*ner 8

jdbc:jtds:sqlserver://x.x.x.x/database替换x.x.x.x为SQL Server计算机的IP或主机名.

jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS

要么

jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS

如果您还想在连接字符串中设置用户名和密码,而不是分别对连接对象设置:

jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS;user=foo;password=bar

(更新了我的错误信息并添加了对实例语法的引用)