java ResultSet元数据未返回第一行
此代码返回除第一行之外的每一行。我看不出有什么问题?我怎样才能让它包括第一个呢
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");
}
}
# 1 楼答案
你给
res.next()
打了两次电话——一次是在这里:一旦来到这里:
在
if
语句和while
语句之间,您正在“查看”第一行——但当您进入while
循环体时,您已经在第二行了最简单的解决办法可能是改变:
致:
# 2 楼答案
调用
if(res.next)
时,您正在移动ResultSet
这意味着当你进入循环时,你已经落后一行了
把你的循环改成一段时间
这将在对^{的第一个循环调用之前运行代码
# 3 楼答案
res.next()
将自动将结果集移动到上。在打印任何行之前,首先在if
语句中调用它,然后在while
语句中再次调用它,由于在打印任何行之前调用它两次,因此缺少第一行将
while
更改为do..while
,这应该按照您的意愿进行# 4 楼答案
试试这个。我希望它能奏效
# 5 楼答案
这里的问题是ResultSet的索引不是以0开头的。因此 如果尚未全局声明ResultSet,则必须按以下方式编写: ResultSet res=null; 否则就行了