java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at mydatabase.TestJDBC.main(TestJDBC.java:25)
hello
---------------------------------------------源码----------------------------------
package mydatabase;
import java.sql.*;
public class TestJDBC {
// 定义驱动程序名称
 public static final String drivername="com.microsoft.jdbc.sqlserver.SQLServerDriver";
 
  // 定义驱动程序的URL
    public static String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=pubs";
    
    // 定义访问数据库用户名
    public static final String user="sa";
    // 密码
    public final String password="";
    
    public static void main(String [] args) throws InstantiationException, IllegalAccessException{
     String queryString ="select * from titles";
     Connection conn=null;
     Statement st=null;
     ResultSet rs=null;
    
     try {
     // 加载驱动程序
Class.forName(drivername);
 // 建立连接
conn=DriverManager.getConnection(url,"sa","");
// 创建查询
st=conn.createStatement();
// 执行查询
rs=st.executeQuery(queryString);

while(rs.next()){
System.out.println("书名:"+rs.getString("title_id")+
"(定价:"+rs.getDouble("title")+")");
}
rs.close();
st.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
System.out.println("hello");
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if((st!=null))
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
    }
    
    
}
------------------------------------------------------------------------------------------------------------------
我安装了sqlserver2000, windows 登陆
安装了:Microsoft SQL Server 2000 Driver for JDBC,并将lib下的三个连接数据库的jar复制到了jdk/jre/lib/ext下,还有tomcat下的lib
环境变量我设置为:JDBC_HOME  C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC
                   Classpath: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%TOMCAT_HOME%\common\lib\servlet-api.jar;%JDBC_Home%
                               \lib\msbase.jar;%JDBC_Home%\lib\mssqlserver.jar;%JDBC_Home% \lib\msutil.jar 
可是还是报上面的错啊?

解决方案 »

  1.   

    // 定义驱动程序的URL 
        public static String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=pubs"; 
    改为:
    public static String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs"; 试试。。
      

  2.   

    rs.close(); 
    st.close(); 
    conn.close();
    在finally中关闭就可以了,还有前边定义了user和password,为什么在定义url的时候还要重新写一遍?
    自己琢磨一下吧
      

  3.   

    1.先打一下SQLServer2000 sp4的补丁.这个错误50%都是这个引起的.
    2.如果上面打了之后没有好,再看看Sqlserver2000的TCP/IP的侦听是否启动.
    3.再看1433端口是否允许,主要是防火墙控制.
      

  4.   

    最大的问题可能是SP2的SQLServer2000版本太低,那三个驱动根本就不管用,这个可以用MYECLIPSE中的Hibernate试,看能否连接上。强烈建议下载sqlserver 2000的sp3或者SP4版,然后再使用它们的驱动。
      

  5.   

    加上一条也非常可能的原因,就是混合认证而不能只是windows身份认证.
      

  6.   

    加一条非常可以能的原因,SQLSERVER的认证方式改成混合认证.不能只是WINDOWS身份认证
      

  7.   

     我看了一下SQLServer2000 sp4 有200M,有这么大吗?
      

  8.   

     我的sqlserver 2000装的是个人版,混合模式进入不了。一直都是Windows模式进入的,这是为何呢?
      

  9.   

    如果是windows模式的话,JDBC肯定连结不上,因为JDBC不能模拟虚拟客户端.
      

  10.   

      要装SQL SERVER 2000的SP4的补丁!
    conn=DriverManager.getConnection(url,"sa","密码"); 
    //要把密码加上去~~~