开发者

Function works only with hard coded values

开发者 https://www.devze.com 2023-03-26 00:35 出处:网络
This is the code I am working on: if(connection.doDatabaseRead(findSQL)) { ResultSet retRES = connection.getResultSet();

This is the code I am working on:

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

      int i = 0;

      //开发者_StackOverflow社区 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 is a string vector

When I try to add the database results to the vector the code crashes with this error.

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

I have the same piece of code working elsewhere in the program but I use real numbers like 0, 1 and 2 instead of i and it works fine.

As I do not know how many results the database request will have I need it to be dynamic but it will only work hard coded. How can I make it work with i ?


The argument to getString is the column index, not the row index as you seem to think. The function returns the value of the given column in the current row, while next advances the cursor to the next row.

You probably mean:

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

in which case you can lose i altogether.


Java ResultSet objects are 1-indexed in this regard. The first element is at 1, not 0. See the javadoc.

EDIT: That's true too, but indeed the problem is this appears to be used as a row index! it's certainly the column.


This is your problem:

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

ResultSet.getString(i) gets a String from column number i

You want something like

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


column index starts from 1

As I do not know how many results the database request will have I need it to be dynamic but it will only work hard coded. How can I make it work with i

ResultSetMetaData rsMetaData = rs.getMetaData();

int numberOfColumns = rsMetaData.getColumnCount();

See Also

  • ResultSetMetaData


Let your i start with 1 as specified in the API docs


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();   
                   }   
               }
0

精彩评论

暂无评论...
验证码 换一张
取 消