while(result.next())
{
...
}
然后我想再从头开始,
然后用个 
result.beforFirst();
可是确抛出异常 java.sql.SQLException: 对只转发结果集的无效操作: beforeFirst
那result.beforFirst(); 怎么用啊?

解决方案 »

  1.   

    仔细研究一下
    ResultSet.TYPE_SCROLL_INSENSITIVE
    ResultSet.CONCUR_UPDATEBLEconn.createStatement(int,int);
      

  2.   

    the result set type is TYPE_FORWARD_ONLY
    就会抛出异常
      

  3.   

    你用result.first()放法不就行了吗?
      

  4.   

    http://caterpillar.onlyfun.net/Gossip/index.html
    Java Gossip: ResultSet 游標控制
    之前在建立Statement或 PreparedStatement,您所使用的是Connection無參數的createStatement()與 preparedStatement(),這樣取得的Statement其執行SQL後得到的ResultSet,將只能使用next()方法逐筆取得查詢結果。您可以在建立Statement物件時指定resultSetType,可指定的參數有 ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE與 ResultSet.TYPE_SCROLL_SENSITIVE,在不指定的情況下,預設是第一個,也就是只能使用next()來逐筆取得資料,指定第二個或第三個,則可以使用ResultSet的afterLast()、previous()、absolute()、relative()等方法。ResultSet.TYPE_SCROLL_INSENSITIVE與ResultSet.TYPE_SCROLL_SENSITIVE 的差別在於能否取得ResultSet改變值後的資料,另外您還必須指定resultSetConcurrency,有 ResultSet.CONCUR_READ_ONLY與ResultSet.CONCUR_UPDATABLE兩個參數可以設定,前者表示只能讀取 ResultSet的資料,後者表示可以直接使用ResultSet來操作資料庫,這會在下一個主題後說明。createStatement()不給定參數時,預設是ResultSet.TYPE_FORWARD_ONLY、 ResultSet.CONCUR_READ_ONLY。這邊先示範如何控制ResultSet的讀取游標,在建立Statement時,您使用 ResultSet.TYPE_SCROLL_INSENSITIVE及ResultSet.CONCUR_READ_ONLY即可,下面這個例子示範從查詢到的資料最後一筆開始往前讀取:Statement stmt = conn.createStatement(
                              ResultSet.TYPE_SCROLL_INSENSITIVE,  
                              ResultSet.CONCUR_READ_ONLY); 
    ResultSet result = stmt.executeQuery(
                              "SELECT * FROM message"); 
    result.afterLast(); 
    while(result.previous()) { 
         System.out.print(result.getString("name") + "\t"); 
         System.out.print(result.getString("email") + "\t"); 
         System.out.print(result.getString("subject") + "\t"); 
         System.out.print(result.getString("time") + "\t"); 
         System.out.println(result.getString("memo") + "\t"); 

    stmt.close(); 
    conn.close();  afterLast()會將ResultSet的讀取游標移至最後一筆資料之後,您使用previous()方法往前移動讀取游標。您也可以使用absolute()方法指定查詢到的資料之位置,例如absolute(4)表示第四筆資料,absoulte(10)則是第十筆資料,如果指定負數,則從最後往前數,例如absolute(-1)則是最後一筆資料,若有100筆資料,absoulte(-4)則是第97筆資料。relative()方法則從目前游標處指定相對位置,例如若目前在第25筆資料,則relative(-2)則表示第23筆資料,而relative (4)則表示第29筆資料。另外有還beforeFirst(),可以將游標移至資料的第一筆之前,first()可以將游標移至第一筆資料,而last()可以將游標移至最後一筆資料。