技术中心

这里象征着我们的态度和能力

>浅谈如何解决微软自带JDBC的resultset缺陷
发布者:中国IT实验室    信息来源:中国IT实验室    发布时间:2012-01-28      浏览次数:5694
分享到:

新浪微博

腾讯微博

QQ空间

豆瓣网

QQ好友

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

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

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730
Baidu
map