繁体   English   中英

ResultSet MetaData不返回第一行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM