解决java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket这个异常

用JDBC连接SQL Servers数据库的时候,遇到这个问题。

今天忙了两个多小时来解决,最后终于搞定。把自己总结的一点经验和大家分享下,因为我发现网上有很多人遇到这个问题,但解决方案不多。


下面是正确的步骤,很简单:

1、首先要确保安装了 sql server 2005,在xp 或win 7下安装了  sql sp4 补丁(补丁非常重要,我就是一直没有给数据库打补丁不能连接的)。SP4补丁的下载地址是:http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5


2.配置驱动。把安装驱动器目录下lib中的三个jar包msbase.jar、mssqlserver.jar、msutil.jar放到你的web 服务器的lib 下面(比如说Tomcat下面的lib文件夹下)。或者设置到环境变量classpath中(如果你不是建立web项目的话应该选择这个)。这三个包也可以在网上搜索一下下载下来,很多的。

3.代码:

[java] view plain copy print ?
  1. <span style="font-size: 16px;">package util;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8. import java.util.Properties;  
  9.   
  10. import javax.swing.JButton;  
  11.   
  12. public class JdbcUtil {  
  13.     private static String url="jdbc:microsoft:sqlserver://127.0.0.1:1434;dataBaseName=master";</span>  
[java] view plain copy print ?
  1. <span style="font-size: 16px;"><span>   </span>/*127.0.0.1是你的服务器的IP地址,因为我的SQL Server就安装在本地,所以IP就是localhost了</span>  
[java] view plain copy print ?
  1. <span style="font-size: 16px;"><span>   </span> 1434是数据库的端口,默认是1433,不知道咋滴我的是1434,捣鼓了半天才找到自己端口出问题了。</span>  
[java] view plain copy print ?
  1. <span style="font-size: 16px;"><span>   </span>master是数据库的名字,这个数据库是SQL Server2005自带的一个数据库。</span>  
[java] view plain copy print ?
  1. <span style="font-size: 16px;"><span>   </span>*/  
  2.     private static String user="sa";  
  3.     private static String pwd="";  
  4.       
  5.   
  6.       
  7.     private JdbcUtil(){  
  8.           
  9.     }  
  10.     // 1、注册驱动com.microsoft.jdbc.sqlserver.SQLServerDriver  
  11.     static{  
  12.         try {  
  13.             Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");  
  14.         } catch (ClassNotFoundException e) {  
  15.             // TODO Auto-generated catch block  
  16.             e.printStackTrace();  
  17.             System.out.println("数据库驱动加载失败!");  
  18.         }  
  19.     }  
  20.     // 2、建立一个连接  
  21.     public static Connection getConnection() throws SQLException{  
  22.         return DriverManager.getConnection(url, user, pwd);  
  23.     }  
  24.       
  25.     // 5、关闭资源  
  26.     public static void free(ResultSet rs,Statement stmt,Connection conn){         
  27.             try {  
  28.                 if(rs!=null)  
  29.                     rs.close();  
  30.             } catch (SQLException e) {  
  31.                 // TODO Auto-generated catch block  
  32.                 e.printStackTrace();  
  33.             }finally{  
  34.                 try {  
  35.                     if(stmt!=null)  
  36.                         stmt.close();  
  37.                 } catch (SQLException e) {  
  38.                     // TODO Auto-generated catch block  
  39.                     e.printStackTrace();  
  40.                 }finally{  
  41.                     try {  
  42.                         if(conn!=null)  
  43.                             conn.close();  
  44.                     } catch (SQLException e) {  
  45.                         // TODO Auto-generated catch block  
  46.                         e.printStackTrace();  
  47.                     }  
  48.                 }  
  49.             }         
  50.     }  
  51.       
  52.       
  53.     //下面的主函数的作用是一个测试,看连库是否成功了。  
  54.     public static void main(String[] args) {  
  55.         JdbcUtil jdbcutil = new JdbcUtil();  
  56.         try {  
  57.             System.out.println(jdbcutil.getConnection());  
  58.         } catch (SQLException e) {  
  59.             // TODO Auto-generated catch block  
  60.             e.printStackTrace();  
  61.         }  
  62.           
  63.     }  
  64.       
  65.       
  66.   
  67. }</span><span style="font-size: 18px;">  
  68. </span>  


如果测试通过,没有报异常就说明没问题了。

下面解决java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket这个异常。

可能原因1:端口不对。

解决办法:在SQL Server查询命令行下面输入:exec sys.sp_readerrorlog 0, 1, 'listening' 查看自己SQL Server                             端口号。本来SQL Server的默认端口是1433.。我的偏不一样,出异常了的时候没想到是这个问题。


     可能原因2:SQL Server 2005的SP4没有安装。这个问题貌似也会导致连接数据库的时候不能通过SQL    Servers身份验证的方式登录。

     解决办法:安装SP4补丁。安装的时候安装在SQL Server下面就可以了。下载下来的补丁是可执行文件。

可能原因3:配置SQL的时候就不能通过SQL Servers身份验证的方式登录。简单地说就是使用SQL Server MangementStudio进入数据库的时候,当你选择了使用SQL Servers身份验证的方式登录不能登录成功。(你忘记了密码,不知道密码,或者是你没有启动那个账号作为你的登录账号)

 解决办法:1.1先用Windows验证的方法进去数据库。右键点击 左边的根目录---》属性,进去服务器属性,点击”安全性“,然后在”服务器身份验证“里面选择SQL Server和Windows身份验证模式。确定保存。1.2在SQL Server Mangement的主界面中双击最左边的”安全性“,在展开的菜单里面选择”登录名“右键点击”sa“这个用户,打开属性菜单栏,在这个里面你可以设置sa的登录密码。最重要的是我们要点击”状态“栏,然后点击登录设置为”启用“。

你可能感兴趣的:(解决java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket这个异常)