无法从 Sql Server 2005 获取数据(连接超时异常)

Posted

技术标签:

【中文标题】无法从 Sql Server 2005 获取数据(连接超时异常)【英文标题】:Unable to get data from Sql Server 2005 (connection time out exception) 【发布时间】:2012-03-06 11:06:34 【问题描述】:

java.sql.SQLException: 网络错误 IOException: Connection timed out: connect at net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:410) at net.sourceforge.jtds.jdbc.ConnectionJDBC3.(ConnectionJDBC3. java:50) 在 net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 在 java.sql.DriverManager.getConnection(DriverManager.java:582) 在 java.sql.DriverManager.getConnection(DriverManager.java :185) 在 mahesh.MyFrame.connectToServer(MyFrame.java:50) 在 mahesh.DataCount.main(DataCount.java:18) 原因:java.net.ConnectException:连接超时:在 java.net.PlainSocketImpl 连接。 socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 在 java.net.Socket.connect(Socket.java:519) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 net。 sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:307) 在 net.sourceforge.jtds.jdbc.SharedSocket.(SharedSocket.java:257) 在 net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:第311章……还有6个

谁能帮我摆脱这个异常?

这是我的java代码

**Class.forName("net.sourceforge.jtds.jdbc.Driver");

连接连接 = DriverManager.getConnection("jdbc:jtds:sqlserver://mindmill:1433/employ","mahesh","mahesh");**

【问题讨论】:

尽快以 stakoverflow 格式格式化问题... ***.com/… 我之前在使用 jtds 驱动程序时遇到了一些问题,请问您可以发布您的 JDBC URL 吗?可能你没有正确设置Sql Server实例,关闭了实例或者为Sql Server实例禁用了TCP/IP客户端协议。 我将 jtds.jar 放在我的 netbeans 项目库文件夹中 【参考方案1】:

正如jTDS FAQ 所述,URL 必须采用以下格式

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]

从你的连接推断:

mindmill 是安装 Sql Server 2005 的 your_computer/server 的名称。 1433 是连接 Sql Server 2005 的(默认)端口。 employ 是数据库名称。 ma​​hesh 是您连接服务器的用户名和密码。

从这里开始,您必须设置其他 sql 连接参数。我会把我的代码发给你:

package edu.jtds.main;

import java.sql.*;

public class SqlServerConnTest 

    Connection conn;

    public void connect() 
        try 
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            String dbName = "TestDB";
            String user = "cajeroUpz";
            String password = "cajero";
            //the name of my SQL SERVER 2005 instance
            String SqlServerInstance = "instance=SQL2005";
            String url = "jdbc:jtds:sqlserver://localhost:1433";
            url = url + "/" + dbName;
            url = url + ";" + SqlServerInstance;
            conn = DriverManager.getConnection(url, user, password);
         catch (Exception e) 
            e.printStackTrace();
        
    

    public Connection getConnection() 
        return this.conn;
    

    public static void main(String[] args) 
        SqlServerConnTest oSqlServerConnTest = new SqlServerConnTest();
        oSqlServerConnTest.connect();
        String sql = "SELECT * FROM TEST_TABLE";
        Connection conn = null;
        Statement stat = null;
        ResultSet rs = null;
        try 
            conn = oSqlServerConnTest.getConnection(); 
            stat = conn.createStatement();
            rs = stat.executeQuery(sql);
            while(rs.next()) 
                System.out.println(String.format("%d %s", 
                    rs.getInt(1), rs.getString(2)));
            
            rs.close();
            stat.close();
            conn.close();
         catch (Exception e) 
            e.printStackTrace();
        
    

我的程序的输出:

1 hello world
2 goodbye!

这里的教训:

    从 SQL Server 2005 及更高版本开始,您必须设置实例的名称(如上例)。 在 SQL Server 中,你必须检查你的 TCP/IP 协议是否启用,并且通讯端口是 1433(这最后一个是默认设置的,检查一下就可以了)。您可以使用 SQL Server 2005 配置工具中的 SQL Server 配置管理启用/禁用。

还有什么问题,直接告诉我吧。

编辑:

最好的情况是,如果您已经尝试将您的电脑作为服务器连接,我的意思是您的电脑必须安装 Sql Server 2005,安装 NetBeans 并且项目已经设置并运行(作为概念证明连接数据库)。

即使您之前没有执行此步骤,在尝试连接远程服务器之前,您也应该回答一系列问题:

    您是否检查过您的电脑和主机之间的通信?在您的情况下,提示命令行(开始/运行...键入“cmd”并回车)并输入命令“ping mindmill”,检查服务器的主机名。 您是否在您的 PC 中安装了 Sql Server Management Studio 并连接到您的服务器?你的服务器允许远程连接吗? Help 1 用户是否有足够的权限连接数据库? Help 2

在您之前回答过这些问题之后再告诉我任何问题。

【讨论】:

我应该在我的操作系统中创建任何 DNS。我所做的只是将 jtds.jar 放在我的 netbeans 项目库文件夹中。我的项目方案是从服务器数据库访问一个表,为此我正在遵循上述程序。请建议我我不知道数据库和服务器数据库访问 您运行项目的PC必须与您的服务器连接,您可以在控制台上使用ping命令进行尝试,例如ping 192.168.1.11(从您的服务器替换 ip)。如果服务器响应正常,请尝试将 Sql Server 与 Sql Server Management Studio (Express Edition for Windows here) 连接。另一个连接问题问题已处理here。请问您的操作系统是什么? @mahesh 抱歉,我没有把你的名字放在我的评论中,现在你可以查看你的收件箱了 :) 我收到以下异常::::::::java.sql.SQLException: Network error IOException: Connection timed out: connect

以上是关于无法从 Sql Server 2005 获取数据(连接超时异常)的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Vista x64 Windows 服务连接到 SQL Server 2005 Db

如何安装sql server 2005

sql server 2005数据库检索时,出现无法为此请求检索数据的问题

如何查询数据库文化 (SQL Server 2005)?

什么是自动从 2005 数据库同步 sql server 2008 数据库的好方法?

Sqoop - 错误工具.ImportTool:导入失败:尝试从 SQL Server 导入时无法转换 SQL 类型 2005