最近本人在自学java数据库方面的知识。当用jdbc机制连接sqlserver2000时,运行以下代码出错了,不知道怎么解决,求高手们指导!(本人用的eclipse,连接数据库的三个包 msbase.jar, mssqlserver.jar,msutil.jar均已导入)
代码如下:
package test1;
import java.sql.*;
public class jdbc { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
PreparedStatement ps = null;
Connection ct = null;
ResultSet rs = null;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 127.0.0.1表示所要连接的数据库的ip地址
// 1433表示sql server的默认端口
ct = DriverManager
.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1");
ps = ct.prepareStatement("select * from dept");
rs = ps.executeQuery();
while (rs.next()) {
System.out.println("编号为:" + rs.getInt(1) + "姓名为:"
+ rs.getString(2) + "地址为:" + rs.getString(3));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (ct != null)
ct.close(); } catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
}
运行后报了以下错误:
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(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at test1.jdbc.main(jdbc.java:21)

解决方案 »

  1.   

    引自:http://www.itxuexi.com/tech/java/database/56421252375286.html
    我在网上查询到问题解决的方式有大概如下 种: 
    一 配置错误 
    jdbc配置语句为: jdbc:microsoft:sqlserver://server_name:1433 
    其中的sqlserver、server_name和端口号都要看仔细了。 
    二 1433端口问题 
    可以通过命令“netstat -an”,来查看是否开了1433端口,如果列表中没有,要增开端口。 
    要保持jdbc配置语句( jdbc:microsoft:sqlserver://server_name:1433)中的端口与数据库传输协议默认的端口相同。 
    MSSQL设置端口号步骤如下: 
    1. 打开企业管理器,依次在控制台根目录 ->Microsoft SQL Servers->SQL Server 组,列出一部分数据库服务器。 
    2. 右击我们要连接的数据库服务器,选择属性,在常规选项卡点击网络配置弹出新窗口。 
    3. 在启用的协议区域我们选择 TCP/IP ,点击属性按钮,弹出新窗口。在这个窗口有网络协议默认值设置,一般默认端口是:1433。 如果你在url中用的端口号与这个不同,就会出现错误。应保持二者相同。 
    三 没打补丁 
    可以用如下的方式查看MSSQL的版本: 
    打开企业管理器-〉工具-〉SQL查询分析器-〉帮助-〉关于 
    查看MSSQL的详细版本号 
    如果 是 8.00.194 就是还没打补丁 
    8.00.760 就是SP3 
    8.00.2039 就是SP4 1、下载MSSQL 2000 Service Pack 3a并安装,SQL请选用混和安装模式!!! 
    http://www.microsoft.com/downloads/details.aspx?FamilyId=90DCD52C-0488-4E46-AFBF-ACACE5369FA3&displaylang=zh-cn 
    解压缩sp3的升级包后,还要点击setup安装.才能成功升级到sp3。 
    2、下载SQL Server 2000 Driver for JDBC Service Pack 3 
    http://www.microsoft.com/downloads/details.aspx?FamilyId=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en 
    四 系统防火墙或者杀毒软件 
    如果系统开防火墙或者杀毒软件,在有些情况下也可以出现类似的问题。 
    没有遇见过,有人这么说。 可能我查询的未必全面,如果你的解决方式不同,可以给我留言,一起完善其解决方法.//本文来源于:IT学习.COM(www.ITxuexi.com)
    //原文请参考:http://www.itxuexi.com/tech/java/database/56421252375286.html
      

  2.   

    很有可能是sql server没有打补丁
      

  3.   

    呵呵,谢谢各位高手啊,基本解决了,是xp系统上的mssql没打补丁,导致1433端口号没有打开。但我还想问一下,用jdbc连接数据库,是不是一定要指定用户名和密码,也就是上面的程序这一行ct = DriverManager
    .getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1",“用户名”,“密码”);一定要指明用户名和密码?不能写成这样:ct = DriverManager
    .getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1");
    注:后者未指定用户名、密码连接数据库时用的是windows验证;开始我没有指定用户名和密码,连接时还是报错,后来,我新建了一个用户登录,设置了用户名、密码,结果就连上了,请高手赐教!不甚感激!