浅谈如何解决微软自带JDBC的resultset缺陷

开发 后端
本文将谈谈如何解决微软自带JDBC resultset缺陷,希望本文能给大家更多的启发与帮助,同时一定要记得关闭RS,释放资源。

微软自带的3个驱动包分别为:msbase.jar,mssqlserver.jar,msutil.jar

微软JDBC resultset驱动的缺点:

(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)

JDBC resultset代码

  1. public static void main(String[] args) {     
  2.         // TODO Auto-generated method stub     
  3.         String url = "jdbc:microsoft:sqlserver://192.168.5.20:1435;DatabaseName=emos2.2";     
  4.         String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";     
  5.         try {     
  6.             Class.forName(driver);     
  7.             Connection conn = DriverManager.getConnection(url, "sa", "1234");     
  8.             if (conn.isClosed() == true) {     
  9.                 System.out.println("SomeThing   goes   wrong ");     
  10.             }     
  11.             PreparedStatement st = conn.prepareStatement("select * from TestTable");     
  12.             ResultSet rs = st.executeQuery();     
  13.             while(rs.next()){     
  14.                 System.out.println(rs.getString("guid"));     
  15.                 System.out.println(rs.getString("username"));     
  16.                 System.out.println(rs.getBinaryStream("content"));     
  17.                      
  18.             }     
  19.         } catch (ClassNotFoundException e) {     
  20.             System.out.println("SomeThing     wrong ");     
  21.             System.out.println(e);     
  22.         } catch (SQLException e) {     
  23.             e.printStackTrace();     
  24.         }     
  25.     }    
  26.  
  27. public static void main(String[] args) {  
  28.   // TODO Auto-generated method stub  
  29.   String url = "jdbc:microsoft:sqlserver://192.168.5.20:1435;DatabaseName=emos2.2";  
  30.   String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";  
  31.   try {  
  32.    Class.forName(driver);  
  33.    Connection conn = DriverManager.getConnection(url, "sa", "1234");  
  34.    if (conn.isClosed() == true) {  
  35.     System.out.println("SomeThing   goes   wrong ");  
  36.    }  
  37.    PreparedStatement st = conn.prepareStatement("select * from TestTable");  
  38.    ResultSet rs = st.executeQuery();  
  39.    while(rs.next()){  
  40.     System.out.println(rs.getString("guid"));  
  41.     System.out.println(rs.getString("username"));  
  42.     System.out.println(rs.getBinaryStream("content"));  
  43.       
  44.    }  
  45.   } catch (ClassNotFoundException e) {  
  46.    System.out.println("SomeThing     wrong ");  
  47.    System.out.println(e);  
  48.   } catch (SQLException e) {  
  49.    e.printStackTrace();  
  50.   }  
  51.  }  
  52.  
  53.    而第三方的驱动jtds1.2很好的解决了这些bug   
  54. Java代码   
  55. public static void main(String[] args) {     
  56.         String url = "jdbc:jtds:sqlserver://192.168.5.20:1435/emos2.2";     
  57.         String driver = "net.sourceforge.jtds.jdbc.Driver";     
  58.         try {     
  59.             Class.forName(driver);     
  60.             Connection conn = DriverManager.getConnection(url, "sa", "1234");     
  61.             if (conn.isClosed() == true) {     
  62.                 System.out.println("SomeThing   goes   wrong ");     
  63.             }     
  64.             PreparedStatement st = conn.prepareStatement("select * from TestTable");     
  65.             ResultSet rs = st.executeQuery();     
  66.             while(rs.next()){     
  67.                 System.out.println(rs.getString("guid"));     
  68.                 System.out.println(rs.getString("username"));     
  69.                 System.out.println(rs.getBinaryStream("content"));     
  70.                      
  71.             }     
  72.         } catch (ClassNotFoundException e) {     
  73.             System.out.println("SomeThing     wrong ");     
  74.             System.out.println(e);     
  75.         } catch (SQLException e) {     
  76.             e.printStackTrace();     
  77.         }     
  78.     }   

【编辑推荐】

  1. 使用JDBC的五个精华功能
  2. Tomcat5+MySQL JDBC连接池配置
  3. 在Weblogic中实现JDBC的功能
  4. 详解JDBC与Hibernate区别
  5. JDBC连接MySQL数据库关键四步
  6. 浅谈JDBC的概念理解与学习
责任编辑:彭凡 来源: javaeye
相关推荐

2009-07-22 13:32:24

JDBC SQL

2021-12-06 14:05:57

区块链算法技术

2023-11-03 08:29:55

自动化测试

2009-07-06 17:50:13

Java JSP

2009-07-06 17:36:06

ResultSetJDBC Connec

2013-06-14 09:33:22

微软补丁蓝屏

2010-11-09 11:07:18

2024-10-15 09:25:08

JDBCMybatis数据库

2009-07-15 18:07:47

JDBC代码

2011-07-22 14:14:23

java

2015-10-14 09:32:36

Amazon谷歌批量迁移

2009-07-15 15:47:12

JDBC DAO

2009-07-17 17:41:25

JDBC连接SQL S

2021-06-28 10:25:47

MySQL语句接口

2021-06-28 10:00:32

JDBC数据库MySQL

2012-09-05 11:09:15

SELinux操作系统

2017-10-17 09:21:06

2009-07-15 17:52:23

sqlite jdbc

2009-07-15 15:18:01

JDBC连接SQL S

2009-07-23 13:30:46

JDBC事务
点赞
收藏

51CTO技术栈公众号