[英]ResultSet MetaData not returning first row
此代码返回除第一行外的每一行。 我看不出有什么问题吗? 我如何使它包括第一个?
stmt = con.createStatement();
ResultSet res=stmt.executeQuery("SELECT * FROM Orders ORDER BY OrderID");
if (res.next())
{
ResultSetMetaData rsmd=res.getMetaData();
int columnCount=rsmd.getColumnCount();
for (int i = 1; i<= columnCount; i++) {
columnHeading=columnHeading+"\t"+rsmd.getColumnName(i);
}
System.out.println(columnHeading);
while(res.next()) {
for (int i= 1; i<= columnCount; i++) {
System.out.print("\t"+res.getString(i));
}
System.out.println("\n");
}
}
您两次调用res.next()
-在这里一次:
if (res.next())
然后在这里:
while (res.next())
在if
语句和while
语句之间,您正在“看”第一行-但是,当您进入while
循环主体时,您已经在第二行了。
最简单的解决方法可能是更改:
while (res.next())
{
}
至:
do
{
} while (res.next());
调用if(res.next)
时,您正在移动ResultSet
。
这意味着当您进入循环时,您已经向下一行。
将循环更改为do-while
do {
} while (res.next());
这将在第一个循环调用next
之前运行代码。
res.next()
将自动移动结果集。 您先在if
语句中调用它,然后再在while
语句中调用它,然后再打印出任何行,并且由于您在打印任何行之前两次调用它,因此缺少第一行。
将while
更改为do..while
,这应该随您所愿。
尝试这个。 我希望它能起作用。
stmt = con.createStatement();
ResultSet res=stmt.executeQuery("SELECT * FROM Orders ORDER BY OrderID");
if (res != null)
{
ResultSetMetaData rsmd=res.getMetaData();
int columnCount=rsmd.getColumnCount();
for (int i = 1; i<= columnCount; i++) {
columnHeading=columnHeading+"\t"+rsmd.getColumnName(i);
}
System.out.println(columnHeading);
while(res.next()) {
for (int i= 1; i<= columnCount; i++) {
System.out.print("\t"+res.getString(i));
}
System.out.println("\n");
}
}
这里的问题是ResultSet的索引不是以0开头。因此,如果尚未全局声明ResultSet,则必须以以下方式编写:ResultSet res = null; 否则它将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.