sqlserver2000驱动和sqlserver2005驱动的纠结情结

       这段时间的专业实训主要是j2ee和sqlserver,就在前几天配置sqlserver的时候出现了一个纠结的问题,随着问题的加深,慢慢的探索出sqlserver2000的驱动和sqlserver2005的驱动之间的纠结的关系。

    虽然sqlserver2000的那三个包理论上是连接sqlserver2000数据库的,但是也可以用来连接sqlserver2005的数据库,只是在加载的驱动类是不一样,

       2000的驱动里面,加载驱动类是: Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);

       2005里面,加载驱动是:Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);

       地址都可以是:String sqlUrl =”jdbc:sqlserver://localhost:1433;databaseName=school”; 当然在2000里面还可以使用String sqlUrl =”jdbc:microsoft:sqlserver://localhost:1433;databaseName=school”;

    现在我们开始测试吧!把tcp/ip远程连接关闭,这样才能开到效果。

    2000的代码:

package com.yndx.school.dao;

//导数据库操作包
import java.sql.*;

/**
* 数据库辅助类
* @author Administrator
*
*/
public class DBUtil2000 {

/**
* 获取数据库连接
* @return
*/
public Connection getConn(){
// 1.引入数据库驱动JAR包

// 2. 定义数据库连接对象
Connection conn = null;

// 连接字符串
String sqlUrl ="jdbc:microsoft:sqlserver://localhost:1433;databaseName=school";
//String sqlUrl ="jdbc:sqlserver://localhost:1433;databaseName=school";
//String sqlUrl ="jdbc:sqlserver://数据库服务器IP:对应端口号;databaseName=数据库名";

// 登陆用户名
String userName = "sa";

// 登陆密码
String userPassword = "1";

try{
//3. 加载驱动
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

//4. 获取连接
conn = DriverManager.getConnection(sqlUrl,userName,userPassword);
//DriverManager.getConnection(连接字符串,登陆用户名,登陆密码);

}catch(Exception e){
e.printStackTrace();
}

return conn;
}

public static void main(String[] args) {
DBUtil2000 db = new DBUtil2000();
Connection conn = db.getConn();
System.out.println(conn.getClass());

}

}

 

    2005的代码:

package com.yndx.school.dao;

//导数据库操作包
import java.sql.*;

/**
* 数据库辅助类
* @author Administrator
*
*/
public class DBUtil2005 {

/**
* 获取数据库连接
* @return
*/
public Connection getConn(){
// 1.引入数据库驱动JAR包

// 2. 定义数据库连接对象
Connection conn = null;

// 连接字符串
String sqlUrl ="jdbc:sqlserver://localhost:1433;databaseName=school";
//String sqlUrl ="jdbc:sqlserver://数据库服务器IP:对应端口号;databaseName=数据库名";

// 登陆用户名
String userName = "sa";

// 登陆密码
String userPassword = "1";

try{
//3. 加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//4. 获取连接
conn = DriverManager.getConnection(sqlUrl,userName,userPassword);
//DriverManager.getConnection(连接字符串,登陆用户名,登陆密码);

}catch(Exception e){
e.printStackTrace();
}

return conn;
}

public static void main(String[] args) {
DBUtil2005 db = new DBUtil2005();
Connection conn = db.getConn();
System.out.println(conn.getClass());

}

}

       现的错误是:”通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”。”,这个很容易看出,是tcp/ip关闭的原因。

现在我来通过变化连接地址和是否有sqlserver2005 的sqljdbc4来做做实验

1.没有sqljdbc4驱动的时候

    a.地址是:String sqlUrl =”jdbc:sqlserver://localhost:1433;databaseName=school”;

     错误是:“[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.”

    b.地址是:String sqlUrl =”jdbc:microsoft:sqlserver://localhost:1433;databaseName=school”;

    错误是:“[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.”

2.有sqljdbc4驱动的时候

  a.地址是:String sqlUrl =”jdbc:sqlserver://localhost:1433;databaseName=school”;

  错误是:“通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”。”

  b.地址是: String sqlUrl =”jdbc:microsoft:sqlserver://localhost:1433;databaseName=school”;

 错误是:“[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.”

也就是说,在地址是String sqlUrl =”jdbc:sqlserver://localhost:1433;databaseName=school”;的情况下,它会首先去通过调用sqljdbc4驱动包里面的类来连接数据库。没有的情况下才能使用原来的那个包里面的类去连接数据库。而在String sqlUrl =”jdbc:microsoft:sqlserver://localhost:1433;databaseName=school”;的情况只能是使用2000的包。

共有 17 条评论

Top