2011-08-04 65 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(); 
        } 
       }