作者:江南白衣     

  JDBC有夠慢的,出到了3.0了才有個(gè)Rowset能類似于windows下ADO的概念,卻還是達(dá)不到ADO.net的水平。幸虧Java里ORM這塊比較爭氣,趁著C#的ObjectSpace跳票,可以繼續(xù)耀武揚(yáng)威。

  Rowset對比于ResultSet,除了不用保持Connecton外,更重要特點(diǎn)是能夠類似于ADO的編程方式,直接對Row賦值來進(jìn)行Insert與Update, 而不用寫SQL語句。   在windows編程中經(jīng)??梢娺@種模式,特別是ADO.net用的好時(shí),ORM也只能算是錦上添花....

     在oracle的sample代碼中,rowset02.java完整demo了RowSet的ADO模式。
     簡化后的代碼如下:

public class RowSet02
 {
  
public static void main (String []args)
  {
   
try
    {
         OracleCachedRowSet crowset 
= new OracleCachedRowSet (); 
          crowset.setUrl (java:oracle:oci8:@);
          crowset.setUsername (
"hr"); 
          crowset.setPassword (
"hr"); 
        
          
/*Select*/ 
          crowset.setCommand (
"SELECT seatno, tdate, name, class FROM reservation");
          crowset.execute ();
          System.out.println (
"Seat no  Travel Date  Name   Class"); 
          
while (crowset.next ()) 
          { 
             printRow (crowset);
          }
          crowset.setReadOnly (
false); 
    
          
/*Update*/ 
          crowset.beforeFirst ();
          
if (crowset.absolute (2))
         {
             crowset.updateString (
4"Business");
             crowset.updateRow ();
          } 

          
/*Insert*/  
          crowset.beforeFirst ();  
          crowset.moveToInsertRow (); 
          crowset.updateInt (
1107);  
          crowset.updateDate (
2new Date (975915381774L));
          crowset.updateString (
3"Pluto");
          crowset.insertRow ();

           
/*Delete*/ 
          crowset.beforeFirst (); 
          
if (crowset.absolute (6)) 
         {
            crowset.deleteRow (); 
         }
         
         crowset.acceptChanges (); 
         crowset.close (); 
     }
    catch (SQLException ea) 
    {
      ea.printStackTrace (); 
   }
  }
 }