此代码返回除第一行之外的每一行。我看不出有什么问题吗?我怎么能把它包括在内呢?
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");
}
}
答案 0 :(得分:2)
您正在拨打res.next()
两次 - 一次在此处:
if (res.next())
并且在这里:
while (res.next())
在if
语句和while
语句之间,您正在“查看”第一行 - 但是当您进入while
循环体时,您就是已经在第二排了。
最简单的修复可能是改变:
while (res.next())
{
}
要:
do
{
} while (res.next());
答案 1 :(得分:0)
当您致电ResultSet
时,您正在移动if(res.next)
。
这意味着当您进入循环时,您已经排成一行。
将循环更改为do-while
do {
} while (res.next());
这将在第一次循环调用next
之前运行代码。
答案 2 :(得分:0)
res.next()
会自动移动结果集。你先在if
语句中调用它,然后在打印任何行之前再次在while
语句中调用它,并且在打印任何内容之前调用它两次,就会丢失第一行
将while
更改为do..while
,这应该可以按照您的意愿进行。
答案 3 :(得分:0)
试试这个。我希望它能奏效。
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");
}
}
答案 4 :(得分:-1)
这里的问题是ResultSet的索引不以0开头。因此 如果您尚未全局声明ResultSet,则必须按以下方式写入: ResultSet res = null; 否则它会起作用。