设为首页 收藏本站
查看: 564|回复: 0

[经验分享] JDBC 连接sql serer 2000

[复制链接]

尚未签到

发表于 2016-11-10 06:23:50 | 显示全部楼层 |阅读模式
  java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
  
  
  转载;
  【系统】
  winxpsp3
  【工具】
  MyEclipse6.5
SQLServer2000个人版(升级到sp4  SQL版本8.00.2039)
SQLServer 2000 Driver for JDBC
  【注意事项】
  1.Test.java必须要处理SQLException和ClassNotFoundException两个异常,否则MyEclipse提示这两个异常不可控制;
  2.遍历结果集的时候用While语句,用if(rs.next())只会输出结果集的第一条记录。
  【步骤】
  1.SQLServer2000个人版升级到SP4,没有装过SP3直接到SP4(SQL版本8.00.2039)
2.安装SQLServer 2000 Driver for JDBC,从它的安装目录下的lib目录下拷贝3个jar:mssqlserver.jar;msutil.jar;msbase.jar
到工程目录WebRoot\WEB-INF\lib\下(否则报错是Error Establish Socket)或者直接从MyEclipse下构建路径。
  3.MyConnection.java
  view plaincopy to clipboardprint?
package tff.messagebook.Database;  
 
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.SQLException;  
 
public class MyConnection {  
    private String Driver;  
    private String Url;  
    private String UserID;  
    private String Password;  
    private Connection conn=null;  
      
      
    public MyConnection(){  
        this.Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";  
        this.Url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=guestbook";  
        this.UserID="sa";  
        this.Password="";  
    }  
    public Connection getConnection() throws SQLException,ClassNotFoundException{  
        try{  
        Class.forName(this.Driver);  
        this.conn=DriverManager.getConnection(this.Url, this.UserID, this.Password);  
        }catch(SQLException e1){  
            e1.printStackTrace();  
        }catch(ClassNotFoundException e2){  
            e2.printStackTrace();  
        }  
        return this.conn;  
    }  
      
    public void close(){  
        try{  
            this.conn.close();  
        }catch(SQLException e){  
            e.printStackTrace();  
        }  
    }  

package tff.messagebook.Database;
  import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
  public class MyConnection {
 private String Driver;
 private String Url;
 private String UserID;
 private String Password;
 private Connection conn=null;
 
 
 public MyConnection(){
  this.Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
  this.Url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=guestbook";
  this.UserID="sa";
  this.Password="";
 }
 public Connection getConnection() throws SQLException,ClassNotFoundException{
  try{
  Class.forName(this.Driver);
  this.conn=DriverManager.getConnection(this.Url, this.UserID, this.Password);
  }catch(SQLException e1){
   e1.printStackTrace();
  }catch(ClassNotFoundException e2){
   e2.printStackTrace();
  }
  return this.conn;
 }
 
 public void close(){
  try{
   this.conn.close();
  }catch(SQLException e){
   e.printStackTrace();
  }
 }
}
  4.Test.java
  view plaincopy to clipboardprint?
package tff.messagebook.Database;  
 
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.sql.Connection;  
 
public class Test {  
    public static void main(String[] args)throws SQLException,ClassNotFoundException {  
        MyConnection myc=new MyConnection();  
        Connection conn=myc.getConnection();  
        Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  
        String sql="select * from guestbook";  
          
        ResultSet rs=stmt.executeQuery(sql);  
          
        while(rs.next()){  
            System.out.println(rs.getString(1)+"---"+rs.getString(2));  
        }  
        if(conn!=null){  
            conn.close();  
        }  
        if(stmt!=null){  
            stmt.close();  
        }  
    }  

package tff.messagebook.Database;
  import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
  public class Test {
 public static void main(String[] args)throws SQLException,ClassNotFoundException {
  MyConnection myc=new MyConnection();
  Connection conn=myc.getConnection();
  Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
  String sql="select * from guestbook";
  
  ResultSet rs=stmt.executeQuery(sql);
  
  while(rs.next()){
   System.out.println(rs.getString(1)+"---"+rs.getString(2));
  }
  if(conn!=null){
   conn.close();
  }
  if(stmt!=null){
   stmt.close();
  }
 }
}
  5.运行。
  【报错记录】
  1.如果
  if(conn!=null){
   conn.close();
  }
  if(stmt!=null){
   stmt.close();
  }
  的顺序关闭错误,报错:
  Exception in thread "main" java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for
  JDBC]Socket closed
 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.TDSRPCRequest.submitRequest(Unknown Source)
 at com.microsoft.jdbc.sqlserver.tds.TDSCursorRequest.closeCursor(Unknown Source)
 at com.microsoft.jdbc.sqlserver.tds.TDSCursorRequest.completeRowProcessing(Unknown
  Source)
 at com.microsoft.jdbc.sqlserver.SQLServerImplResultSet.close(Unknown Source)
 at com.microsoft.jdbc.base.BaseResultSet.close(Unknown Source)
 at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
 at com.microsoft.jdbc.base.BaseStatement.close(Unknown Source)
 at tff.messagebook.Database.Test.main(Test.java:26)
  【免责声明】
  是为私人日志,如果您参考了此文,参考的后果自负。
  【作者 zwdl 】
  【参考文献】
  地址:http://blog.csdn.net/yfrainy/archive/2009/07/08/4330070.aspx
  原文:
  一、准备环境
  Windows XP+JDK5.0+Microsoft SQL Server 2000个人版+JCreator(或Eclipse)
  下载数据库驱动程序SQL Server 2000 Driver for JDBC Service Pack 3.exe
  http://www.microsoft.com/downloads/details.aspx?familyid=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en#filelist
  安装完毕后 在C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib
   目录下有三个包msbase.jar mssqlserver.jar msutil.jar
   1、在命令行下编译运行,配置环境变量 将这三个包的路径加入CLASSPATH中
   2、在JCreator中 配置 选项 JDK配置文件 编辑 添加存档路径 添加三个包
   3、在Eclipse此中   选择项目的构建路径——库—— 添加外部JAR 将这三个添加进去
  二、出现的问题及解决办法
1、是不是出现了Error establishing socket之类的错误 呵呵
这是因为连接数据库的1433端口没打开 我们必须要下载SP3的补丁
http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe
SP4行不呢? 照理说SP4应该包括SP3 我也是这样想 下了个SP4 70多M    装好后
用NETSTAT -A -N 没发现TCP 1433被监听 UDP 1434没被监听 火啊   在网上找啊找
发现有位仁兄也遇见此类问题 问题就出在SP4补丁上 一定要打上SP3补丁才管用
微软官方有下 有三个文件 一定要下这个chs_sql2ksp3.exe 下别的也不行 因为我首先就下了个chs_sql2kdesksp3.exe 他妈的不知道是什么东西 也不能打开1433 装好chs_sql2ksp3.exe后重启
NETSTAT -A -N测试若发现1433被监听 TELNET 127.0.0.1 1433 能连接 那么恭喜你 软件环境可以准备好了
2、当然还有其他的问题比如防火墙设置比如SQL SERVER里的网络配置(TCP/IP默认端口是否是1433)不过一般在一般情况还是不需修改。
  
三、实例说明
下面是一个实例:
import java.sql.*;
public class ConSqlserver{
     Connection con;
     Statement st;
     ResultSet rs; 
     public ConSqlserver(){ 
      try{   
   String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
   String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
        Class.forName(driver);
        con=DriverManager.getConnection(url,"SA","密码");
                System.out.println("连接成功!");
                con.close();          
          }catch(Exception e){
                e.printStackTrace();
          }
     }
  public static void main(String args[]){   
      
   new ConSqlserver(); 
     }
  }
  四、补充
      写连接代码时需要注意2000和2005的不同:  
   1、连接SqlServer2000  
       Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
       URL    =    "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tempdb";  
   2、连接SqlServer2005  
       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();  
       URL    =    "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb"; 
  
  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhs1931/archive/2009/09/24/4588151.aspx
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298082-1-1.html 上篇帖子: Sql Server2005索引内部构造 下篇帖子: PL/SQL Developer使用技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表