2013-08-07 56 views
0

您好我有以下三排在我的表说TB1Java的SQL结果集检索顺序不正确

key time id rowid 
X  11:40 1  1 
Y  4:50 1  2 
Z  6:48 1  2 

现在我使用JDBC来获取记录,并遍历结果集,如下图所示:

rs = statement.executeQuery("select * from tb1") 
ResultSetMetaData md = rs.getMetaData(); 
int cols = md.getColumnCount(); 
while(rs.next()) 
{ 
    for(int i = 1; i <= cols ; i++) 
    { 
    System.out.println("col name " + md.getColumnName(i)); 
    System.out.println("col name " + rs.getObject(i)); 
    } 

} 

当我奇怪地执行上面的代码时,它总是首先打印第二行,然后打印第一行然后打印第三行。简而言之,结果集数据检索不正确。我不明白为什么?请指导。提前致谢。

+4

他们为什么要这样做?由于您的查询中不包含'order by'子句,所以订单未定义。 –

+0

当您使用'order by'命令时,是否也发生同样的情况? –

回答

4

您尚未指定“order by”子句。通常,数据库不需要按任何顺序返回行,除非指定了“order by”子句。将order by子句添加到您的select语句中。

+0

嗨,感谢您的意见。在数据库表中,行与这里写的完全相同,所以resultset也应该按原样返回行。或者它不是那样? – u449355

+2

关系数据库可以按照与插入顺序相同的顺序返回行,但没有“order by”子句,它当然不需要这样做。 – rgettman

+1

我前段时间面临同样的问题。本地sql从休眠和蟾蜍返回的结果集不是相同的顺序。所以rgettman是对的。使用“order by”语句。 –