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

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

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


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

        1、首先要确保安装了 sql server 2000,在xp 或win 2003下安装了  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.代码:

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.swing.JButton;

public class JdbcUtil {
	private static String url="jdbc:microsoft:sqlserver://127.0.0.1:1434;dataBaseName=master";
 /*127.0.0.1是你的服务器的IP地址,因为我的SQL Server就安装在本地,所以IP就是localhost了
  1434是数据库的端口,默认是1433,不知道咋滴我的是1434,捣鼓了半天才找到自己端口出问题了。
 master是数据库的名字,这个数据库是SQL Server2005自带的一个数据库。
 */
	private static String user="sa";
	private static String pwd="123";
	

	
	private JdbcUtil(){
		
	}
	// 1、注册驱动com.microsoft.jdbc.sqlserver.SQLServerDriver
	static{
		try {
			Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("数据库驱动加载失败!");
		}
	}
	// 2、建立一个连接
	public static Connection getConnection() throws SQLException{
		return DriverManager.getConnection(url, user, pwd);
	}
	
	// 5、关闭资源
	public static void free(ResultSet rs,Statement stmt,Connection conn){		
			try {
				if(rs!=null)
					rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				try {
					if(stmt!=null)
						stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					try {
						if(conn!=null)
							conn.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}		
	}
	
	
	//下面的主函数的作用是一个测试,看连库是否成功了。
	public static void main(String[] args) {
		JdbcUtil jdbcutil = new JdbcUtil();
		try {
			System.out.println(jdbcutil.getConnection());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	

}


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

下面解决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的登录密码。最重要的是我们要点击”状态“栏,然后点击登录设置为”启用“。




你可能感兴趣的:(sql,数据库,jdbc,server,socket,Microsoft,sqlserver)