我创建了一个数据库,该数据库为给定用户存储了不同的属性。我实现了一种算法,该算法采用username属性并将其内容存储并存储在数组中。但是由于某种原因,在打印数组时,它会按字母顺序显示用户。我希望它返回数据库的原始顺序。对于上下文,我在Java中使用MySQL语法的JDBC API。
我还没有实现ORDER BY
语句,它只是一个简单的SELECT FROM WHERE
语句,但似乎按字母顺序返回。
public void DisplayUsers() throws SQLException {
String queryCount = "SELECT COUNT(Username) FROM UserInfo";
String query = "SELECT Username FROM UserInfo";
declaringDataBase();
rsObj = statObj.executeQuery(queryCount);
String x = null;
while(rsObj.next()){
x = rsObj.getString(1);
}
int rowNum = Integer.parseInt(x);
rsObj = statObj.executeQuery(query);
String UserArray[] = new String[rowNum];
int counter = 0;
while(rsObj.next()){
String user = rsObj.getString("Username");
UserArray[counter] = user;
System.out.println(UserArray[counter]);
counter++;
}
}
第declaringDatabase();
行仅调用另一种方法将我的数据库连接到代码。 count语句使用属性Username下的用户数,并创建一个整数以存储为数组的长度。但是无论如何,我的UserArray[]
会按字母顺序返回值,有人知道为什么吗?
答案 0 :(得分:3)
我希望它返回数据库的原始顺序。
SQL表表示无序集。 (实际上,在数学中,集合总是无序的。)SQL结果集是无序的*除非您为最外面的order by
明确包含select
子句。
因此,您需要包括一个订单。
大多数设计良好的数据库每行的ID都会自动递增。如果您有这个,那么很容易按插入顺序获得结果集:
SELECT Username
FROM UserInfo
ORDER BY UserId; -- assuming `UserId` is an auto-incremented column
如果要按字母顺序排序,则可以使用:
ORDER BY Username
如果您想获得更好的性能,则可以在order by
所使用的键上定义一个索引。