javaSql server2000 2005链接问题
javasql server 20002005java的连接有很大的不同,主要表现在第一驱动上、第二database,第三url上。。。
不然会导致以下问题
1 sql2000的连接方式,链接2005数据库时,链接成功,但是执行时出现以下问题:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确
自:sech.javaeye/blog/173671
故障:
[SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 1 (""): 数据类型 0x38 未知
 
解决办法:
下载sql 2005 驱动:
www.microsoft/downloads/details.aspx?FamilyID=E22BC83B-32FF-4474-A44A-22B6AE2C4E17&displaylang=zh-cn

修改1:
Sql代码
1. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 version
2. Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 2000 version
修改2:
Sql代码
1. Connection con = Connection("jdbc:sqlserver://<ServerName>;user=<UserName>;password=<Password>");//2005 version
2. Connection con = Connection("jdbc:microsoft:sqlserver://<ServerName>;user=<UserName>;password=<Password>");//2000 version
2 混合使用了20002005URl或者database则会出现:No suitable driver”的错
以下是某人对此解释:
eclipse来进行Microsoft SQL Server 2005数据库方面的开发,先把MS SQL Server 2005 JDBC Driver的驱动下载后加入工程文件的类库中;然后写URL字符串。根据以往的写法写入:url = "jdbc:microsoft:sqlserver://"Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")等内容,结果编译时首先报JDBC驱动的错,后来把Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")的内容改为Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"),本来想应该编译通过了,谁知又报“No suitable driver”的错(如下图):
 
     在百思不得其解时,到微软站点查查,居然url的内容发生改变了,变为:lass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")。修改后编译通过。现将改变点比较如下(见红框内容)


      Microsoft SQL Server 2005 JDBC Driver下载点:msdn2.microsoft/en-us/data/aa937724.aspx
      Microsoft SQL Server 2005 JDBC文档为:msdn2.microsoft/zh-cn/library/ms378956.aspx
综合以上两类问题,总结java 使用jdbc与sql2000和2005的连接方案如下:
针对2000链接(可运行代码):
package com;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnDB {
  public Connection conn = null;
  public Statement stmt = null;
  public ResultSet rs = null;
 
  private static String dbClassName ="com.microsoft.jdbc.sqlserver.SQLServerDriver";
 
private static String dbUrl =
  "jdbc: microsoftsqlserver://localhost:1433;DatabaseName=db_shop";
  private static String dbUser = "sa";
  private static String dbPwd = "123456"; //2005不能为空
 
  public ConnDB(){}
 
 
  public static Connection getConnection() {
    Connection conn = null;
    try {
        Class.forName(dbClassName);
      conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
    }
    catch (Exception ee) {
      ee.printStackTrace();
java连接sqlserver数据库
    }
    return conn;
  }
  public static void main(String[] arg0){
     
      ConnDB db = new ConnDB();
      db.getConnection();
      System.out.println("OK!");
      try {
        db.conn.close();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     
  }
}
而针对2005的设置,区别为:
把2000中的
  private static String dbClassName ="com.microsoft.jdbc.sqlserver.SQLServerDriver";
 
private static String dbUrl =
  "jdbc: microsoftsqlserver://localhost:1433;DatabaseName=db_shop";
改为:
  private static String dbClassName =" com.microsoft.sqlserver.jdbc.SQLServerDriver";
 
private static String dbUrl =
  "jdbc:sqlserver://localhost:1433;DatabaseName=db_shop";
然后针对20002005分别添加不同的驱动即可,但是值得注意的是2005的密码不能为空。。。。。
2000驱动为:
2005驱动只有一个: