从数组中以“自然顺序”返回数据

时间:2019-01-26 21:43:22

标签: java mysql sql jdbc

我创建了一个数据库,该数据库为给定用户存储了不同的属性。我实现了一种算法,该算法采用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[]会按字母顺序返回值,有人知道为什么吗?

1 个答案:

答案 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所使用的键上定义一个索引。