功能仅适用于硬编码值

时间:2011-08-04 11:27:02

标签: java

这是我正在处理的代码:

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之类的实数而不是i,它可以正常工作。

由于我不知道数据库请求会有多少结果,我需要它是动态的,但它只能进行硬编码。 我怎样才能让它适用于我?

6 个答案:

答案 0 :(得分:6)

getString的参数是列索引,而不是您想象中的行索引。该函数返回当前行中给定列的值,而next将光标前进到下一行。

你可能意味着:

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

在这种情况下,您可以完全丢失i

答案 1 :(得分:1)

Java ResultSet对象在这方面是1索引的。第一个元素是1,而不是0.请参阅javadoc

编辑:那也是如此,但确实问题是它似乎被用作行索引!它肯定是专栏。

答案 2 :(得分:1)

这是你的问题:

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

ResultSet.getString(i)从列号i

获取一个String

你想要像

这样的东西
while(retRes.next()) {
   add(retRes.getString(1);
}

答案 3 :(得分:0)

列索引从1

开始
  

由于我不知道数据库请求会有多少结果,我需要它是动态的,但它只能进行硬编码。我怎样才能使它与我一起工作

ResultSetMetaData rsMetaData = rs.getMetaData();

int numberOfColumns = rsMetaData.getColumnCount();

另见

答案 4 :(得分:0)

i以指定in the API docs

的1开头

答案 5 :(得分: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();   
                   }   
               }