在java中Sql server2000 与2005链接问题
在java中sql server 2000与2005与java的连接有很大的不同,主要表现在第一驱动上、第二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 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代码
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 、混合使用了2000与2005的URl或者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
在百思不得其解时,到微软站点查查,居然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: microsoft:sqlserver://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: microsoft:sqlserver://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";
然后针对2000和2005分别添加不同的驱动即可,但是值得注意的是2005的密码不能为空。。。。。
2000驱动为:
而2005驱动只有一个:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论