`
lshh83
  • 浏览: 159427 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

微软自带jdbc驱动缺陷

阅读更多
微软自带的3个驱动包分别为:msbase.jar,mssqlserver.jar,msutil.jar
微软驱动的缺点:
(1)如果采用jdbc-odbc驱动,那么就必须按照查询顺序来一次读取(不论有没有image或text类型)
(2)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,不存在image或text类型字段,那么可以按照无序获取
(3)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,存在image或text类型字段,那么就必须按照顺序读取,否则就会报告Driver]ResultSet can not re-read row data for column之类的错误
测试方法和代码如下:
数据库表:TestTable
    表字段及类型:
         guid char(38)
         title varchar(100)
         content Text
         username varchar(20)
public static void main(String[] args) {
		// TODO Auto-generated method stub
		String url = "jdbc:microsoft:sqlserver://192.168.5.20:1435;DatabaseName=emos2.2";
		String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
		try {
			Class.forName(driver);
			Connection conn = DriverManager.getConnection(url, "sa", "1234");
			if (conn.isClosed() == true) {
				System.out.println("SomeThing   goes   wrong ");
			}
			PreparedStatement st = conn.prepareStatement("select * from TestTable");
			ResultSet rs = st.executeQuery();
			while(rs.next()){
				System.out.println(rs.getString("guid"));
				System.out.println(rs.getString("username"));
				System.out.println(rs.getBinaryStream("content"));
				
			}
		} catch (ClassNotFoundException e) {
			System.out.println("SomeThing     wrong ");
			System.out.println(e);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

   而第三方的驱动jtds1.2很好的解决了这些bug
public static void main(String[] args) {
		String url = "jdbc:jtds:sqlserver://192.168.5.20:1435/emos2.2";
		String driver = "net.sourceforge.jtds.jdbc.Driver";
		try {
			Class.forName(driver);
			Connection conn = DriverManager.getConnection(url, "sa", "1234");
			if (conn.isClosed() == true) {
				System.out.println("SomeThing   goes   wrong ");
			}
			PreparedStatement st = conn.prepareStatement("select * from TestTable");
			ResultSet rs = st.executeQuery();
			while(rs.next()){
				System.out.println(rs.getString("guid"));
				System.out.println(rs.getString("username"));
				System.out.println(rs.getBinaryStream("content"));
				
			}
		} catch (ClassNotFoundException e) {
			System.out.println("SomeThing     wrong ");
			System.out.println(e);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
分享到:
评论
4 楼 gange 2009-07-27  
晕,这是sql2000的驱动,现在sqljdbc 2.0都发布了
3 楼 魔力猫咪 2009-07-03  
JTDS主页上写得很明白,支持7.0、2000和2005,没2008。其最新的1.2.2版本是2007年8月发布的。而这时候SQLServer2008还没发布呢,怎么能说就支持2008呢。
微软SQLServer JDBC Driver 2.0地址
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=99b21b65-e98f-4a61-b811-19912601fdc9
2 楼 lshh83 2009-07-03  
那能麻烦您上传一下新驱动么?还有JDTS是支持2008的
1 楼 魔力猫咪 2009-07-03  
这都是哪年的黄历了???还贴出来。
微软的JDBC驱动已经经过了好几次大幅度更新,最新的最新版驱动还是不错的,支持SQLServer2000、2005、2008。
目前JDTS的更新停止了,目前停滞中。已经2年没发布新版本了,而且对2008没有支持。

相关推荐

Global site tag (gtag.js) - Google Analytics