2012-09-06 65 views
0

請看看下面的代碼的ResultSet不滾動

public List searchData(String query) 
    { 
     List data = new ArrayList(); 

     try 
     { 
      createConnection(); 

      Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
      ResultSet rs = st.executeQuery(query); 


       while(rs.next()) 
       { 

       data.add(rs.getString(2)); 
       data.add(rs.getString(11)); 
       data.add(rs.getString(12)); 
       data.add(rs.getInt(3)); 
       data.add(rs.getInt(4)); 
       data.add(rs.getInt(5)); 
       data.add(rs.getInt(6)); 
       data.add(rs.getString(7)); 
       data.add(rs.getString(8)); 
       data.add(rs.getString(9)); 
       data.add(rs.getString(10)); 

       } 


       for(int i=0;i<data.size();i++) 
       { 
        System.out.println(data.get(i)); 
       } 

       System.out.println("Size of the array: "+data.size()); 



     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      closeConnection(); 
     } 
} 

此代碼是給下面的錯誤

java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index 
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956) 
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113) 
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(JdbcOdbc.java:3810) 
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(JdbcOdbcResultSet.java:5637) 
    at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(JdbcOdbcResultSet.java:582) 
    at normal.DatabaseHandler.searchData(DatabaseHandler.java:331) 
    at normal.SearchForm$ButtonAction.actionPerformed(SearchForm.java:470) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6504) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6269) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4860) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2713) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:680) 
    at java.awt.EventQueue$4.run(EventQueue.java:678) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 

這是爲什麼?如果我在末尾放置

data.add(rs.getString(11)); 
data.add(rs.getString(12)); 

,則此錯誤不會發生。我甚至將結果集設置爲可滾動!爲什麼是這樣?請幫忙!

+2

請勿使用數字作爲索引。從結果集中檢索數據時始終使用列名稱。這樣可以更輕鬆地在表格上進行修改而不會影響現有的代碼。 – giorashc

+0

這不是問題。我現在做了。沒有好的 –

回答

1

「滾動」結果集與在不同行之間前後移動有關。您在獲得的列值時遇到問題。一些jdbc驅動程序對列順序很敏感,我不認爲這是一個設置的事情。我想說你要麼需要按順序讀取列,要麼可能尋找一個不同的jdbc驅動程序。

+0

真棒..是的,我正在做所有那些「while(rs.next())」,它檢查相同的原料,並繼續前進。我決定把所有這些數據分解成單獨的變量,然後做任何我需要的。非常感謝回覆:) –