这是我正在处理的代码:
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,它可以正常工作。
由于我不知道数据库请求会有多少结果,我需要它是动态的,但它只能进行硬编码。 我怎样才能让它适用于我?
答案 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
答案 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();
}
}