2011-08-04 53 views
2

這是我的工作代碼:功能只適用於硬編碼值

if(connection.doDatabaseRead(findSQL)) 
    { 
     ResultSet retRES = connection.getResultSet(); 

     int i = 0; 

     // did we find anything 
     while(retRES.next()) 
     {   
      //read result from query 
      suiteNum.add(retRES.getString(i)); // this is the problem 

      i++; 

      //let other threads breathe 
      Thread.yield(); 
     } 
    } 

suiteNum是一個字符串矢量

當我嘗試將數據庫結果添加到代碼崩潰的載體這個錯誤。

java.sql.SQLException: Column Index out of range, 0 > 1. 

我有相同的代碼在程序的其他地方工作,但我用真實的號碼,如0,1和2,而不是我,它工作正常。

因爲我不知道數據庫請求會有多少結果,我需要它是動態的,但它只能工作在硬編碼狀態。 我如何使它與我一起工作?

回答

6

getString的參數是列索引,而不是行索引,你似乎認爲。該函數返回當前行中給定列的值,而next將光標前移到下一行。

你大概的意思是:

suiteNum.add(retRES.getString(1)); 

在這種情況下,你可以完全失去i

+0

但後來我如何才能從retRES多個結果? – Skeith

+0

@Skeith:多行或多列? – NPE

+0

我期待從數據庫中返回三個字符串,108,109,110,但使用你的建議我現在得到110三次在我的載體。我究竟做錯了什麼 ? – Skeith

1

Java ResultSet在這方面,對象是單索引的。第一個元素爲1,而不是0.請參見javadoc

編輯:也是如此,但確實問題是這似乎被用作行索引!這當然是專欄。

0

列指數從1

開始由於我不知道數據庫的請求將多少結果有我需要它是動態的,但它只會工作硬編碼。我怎樣才能使它工作與我

ResultSetMetaData rsMetaData = rs.getMetaData(); 

int numberOfColumns = rsMetaData.getColumnCount(); 

請參見

1

這是你的問題:

i = 0; 
... 
retRES.getString(i); 

ResultSet。的getString(我)會從列數字的字符串我

你想要的東西像

while(retRes.next()) { 
    add(retRes.getString(1); 
} 
+0

我試過了,現在我得到的最後結果三次而不是三個不同的結果,我如何解決這個問題 – Skeith

+0

你的查詢是什麼樣的?聽起來很奇怪,你會得到相同的結果重複... retRes.next()將光標移動到下一個未讀取的行,並且retRes.getString(某個數字)讀取當前行上的列號「some number」的值。 「!而AREA_ID = ' 」 – hakon

+0

findSQL = 「SELECT AREA_ID」 + \t \t 「FROM suite_area」 + \t \t 「WHERE suite_id = ' 」+ suiteName +「'」 + \t \t +房+「'」; – Skeith

0
if(connection.doDatabaseRead(findSQL)) 
        { 
         ResultSet retRES = connection.getResultSet(); 

         int i = 1; 



       // did we find anything 
        while(retRES.next()) 
        {   
         //read result from query 
         suiteNum.add(retRES.getString(i)); // this is the problem 

         i++; 

         //let other threads breathe 
         Thread.yield(); 
        } 
       }