浅谈如何解决微软自带JDBC的resultset缺陷
创始人
2024-04-16 20:41:16
0

微软自带的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的概念理解与学习

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...