首先把我的运行环境进行声明.
    数据库:SQL Server 2000,运行无误
    打了SP3的补丁,并运行了setup.bat
    JDBC驱动了装了,并将三个包置入Tomcat/lib文件夹中
    更改了Tomcat中的配置文件
    数据库端口号为1433
    通过telnet命令测试端口号是否能用:不能
    部分代码如下:
Connection con = null;
try{
     // 加载JDBC驱动器类
      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
     // 建立到TestDB的数据库连接
      con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Homen", "sa", "exc");
     //在数据库中创建表
     int createTable = -1;
     String strCreateTable = "CREATE TABLE Books (book_id INTEGER, book_name VARCHAR(50), price FLOAT,quantity INTEGER)";
     Statement stmtCreate=con.createStatement();
     createTable = stmtCreate.executeUpdate(strCreateTable);
     stmtCreate.close();
     if ( createTable == 0) {
        out.println("创建表成功!<br>");
网页中出现的异常信息为:[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 
另一个代码也有同样的异常信息:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.) 
注:寻找过类似的答复,有说装SP4,我装了,结果是SQL Server都启动不了,现在SQL是重装的.
   以前也运行过这段代码,完全正常.因为实在找不到其他帮助了,所以请有这方面经验的高手指点一二.感激不尽!!!

解决方案 »

  1.   

    大家能提示下吗?
    还是有什么地方表述的不清楚.让我奇怪的是,一样的代码,一样的运行环境.
    之前运行完全正常,重装SQL之后就是出现以上异常提示.都找不错误之处.
      

  2.   

    如果你在测试连接SQL Server 2000 JDBC连接时出现错误Error establishing socket.请参考如下:
    用 CMD 命令NETSTAT查1433(这是默认的端口,可能被占用,你可以重新设一个新的端口)的端口可是居然没有没有打开,先看看你的服务器有没有打开,如果都大开了那就说明你没有装SQL的sp3或sp4的补丁. 还有一个方法看你是不是要打补丁,那就是看看你的版本号: 
    可以用如下的方式查看MSSQL的版本: 
    打开企业管理器-〉工具-〉SQL查询分析器-〉帮助-〉关于 
    查看MSSQL的详细版本号 
    如果 是 8.00.194 就是还没打补丁 
    8.00.760 就是SP3 
    8.00.2039 就是SP4 
    如果你的版本号是对的,但NETSTAT查1433没有,那可能你的1433端口被占了,换一个端口应该就可以了. 
    换端口的方法是:1. 打开企业管理器,依次在控制台根目录 ->Microsoft SQL Servers->SQL Server 组,列出一部分数据库服务器。 
    2. 右击我们要连接的数据库服务器,选择属性,在常规选项卡点击网络配置弹出新窗口。 
    3. 在启用的协议区域我们选择 TCP/IP ,点击属性按钮,弹出新窗口。在这个窗口有网络协议默认值设置,一般默认端口是:1433。 另有一篇网上的方法,供参考:如运行程序时出现 "Error establishing socket" 错误,则应进行如下调试:
    1 检查SQL SERVER 是否允许远程访问.具体步骤:1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
    2)在相应"数据库"上单击右键,选择"属性"
    3)选择"连接"选项卡,检查"远程服务器连接"下,RPC服务是否选择.2 使用telnet IP地址 1433,系统是否提示连接出错,如系统提示出错
    检查是否防火墙屏蔽了SQL SERVER 或 java IDE 的网络访问端口
    如果是,关闭防火墙,重新启动SQL SERVER和java IDE,进行测试,
    如果系统仍提示上述错误,尝试下列步骤3 检查SQL SERVER 端口号及是否启用了TCP/IP协议,具体步骤:1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
    2)在相应"数据库"上单击右键,选择"属性"
    3)选择"常规"选项卡,点击"网络配置",如启用的协议中无"TCP/IP协议"将其加入
    4)选择"TCP/IP协议",点击"属性",检查其端口号是否为1433
    5)如端口号为1433将其修改为其它端口号,修改jdbc连接语句,将端口号同样改为新启用的端口号,如jdbc:microsoft:sqlserver://server_name:1400(假设新端口号为 1400)以下的方法你每种的去试试:
    #检查一下sql server的connection有没有full.#如果是认证的问题.
    可到sql enterprice manager->指定server->内容->安全性.
    把验证改为 SQL server 及 windows.#点选属性检查一下port是否正确.#执行%MSSQL_HOME%\80\Tools\Binn\SVRNETCN.exe
    把TCP/IP启用.#关掉防火墙.#把SQL server update到sp3
      

  3.   

    检查 SQL Server 2000 的版本号,确定是打上了 SP3 或者是 SP4 补丁(JDBC 只需要 SP3 补丁)执行一下 SELECT @@Version,看看版本号是 8.00.760 还是 8.00.2039,前者是打上 SP3 补丁的,
    后者是 SP4 的,如果小于 8.00.760 说明根本就没打上补丁。----------------------------------------------
    通过telnet命令测试端口号是否能用:不能 1433 端口都不能用还连什么啊?
      

  4.   

    SQL Server有监听器吧?那个打开了吗?换句话说你的数据库服务启动了吗
      

  5.   

    谢谢大家的帮忙.不过问题依旧.我的数据库版本是:8.00.760   确定装了SP3也试过其他端口号,问题依旧.至于SQL数据库没有任何问题。
      

  6.   

    那就对了.   我尝试过好几个端口号,有6000,有1400,每次更改过后都要重启数据库和Tomcat.可还是会出现那个异常.如果网上能找到答案,也不会来发帖麻烦大家了.毕竟编程不能懒的.
      

  7.   

    不知道SQL  Server的connection有没有full. 
    其中connection是什么,新手SQL数据库学的不扎实,看不明白.还有"执行%MSSQL_HOME%\80\Tools\Binn\SVRNETCN.exe 
    把TCP/IP启用. "
    这段代码又是什么意思?不过我TCP/IP协议肯定启动了.
      

  8.   

    我的申明不知道有不有帮助,端口号更改过,使用telnet命令测试过好几个更改后的端口号,还是连接不上.看样子得自己动手了.在次谢过各位的帮忙了.
    待会儿会把分给热心的朋友.谢谢
      

  9.   

    package javaapplication2;
    import java.sql.*;
    import java.sql.Driver;
    public class CdbOper {
        String _sqlstr;
        static Connection conn;
        static Statement pstmt;
        static ResultSet rs;
        //constructors
        public CdbOper() {}
        public CdbOper(String sqlstr) {
            _sqlstr = sqlstr;
        }
        public static ResultSet fun(String sqlstr) {
            try {
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");            
                conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://" + "localhost" + ":" + "1433" +
                        ";databaseName=" + "dbLibary" + ";selectMethod=" + "cursor" +";" , "sa", "1234");  //LZ对照一下这里
                pstmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                rs = pstmt.executeQuery(sqlstr);
            } catch(Exception ex) {
                ex.printStackTrace();
            }
            return rs;
        }
        public static void sub(String sqlstr) {
            try {
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");            
                conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://" + "localhost" + ":" + "1433" +
                        ";databaseName=" + "dbLibary" + ";selectMethod=" + "cursor" +";" , "sa", "1234");
                pstmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                rs = pstmt.executeQuery(sqlstr);
            } catch(Exception ex) {
                ex.printStackTrace();
            }        
        }    
    }上面的是我封装的一个数据库连接用的, FUN是返回RS, SUB没有返回。
    PS:我用的NETBEANS5.5还有ECLIPSE都能运行正常的。当初我查资料用了3天, LZ加油!