当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>J2EE

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

  微软自带的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.     }   

相关内容
赞助商链接