【问题标题】:Returning data from an array in "natural order"以“自然顺序”从数组中返回数据
【发布时间】:2019-01-26 21:43:21
【问题描述】:

我创建了一个数据库,用于存储给定用户的不同属性。我已经实现了一个算法,它采用用户名属性并存储该属性的内容并将其存储在一个数组中。但是由于某种原因,在打印数组时,它会按字母顺序显示用户。我希望它返回我的数据库的原始顺序。对于上下文,我使用 Java 中的 JDBC API,它采用 MySQL 语法。

我没有实现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[] 按字母顺序返回值,有人知道为什么吗?

【问题讨论】:

  • 我感觉你打算写查询 SELECT Username, COUNT(Username) FROMUserInfo GROUP Username ORDER BY Username ASC 而不是这两个查询。
  • 好吧,我只是忘记了一个大写字母,我还没有清理语法。没什么大不了的。请专注于问题,您有解决方案吗:有一个顺序,每行都有一个数字,我希望它返回行号按升序排列的值。如果您没有解决方案或建设性批评,请不要发表评论。
  • 我确实使用了数组?
  • 哦,我想实现排序算法,我的老师告诉我使用数组 - 我更熟悉它们

标签: java mysql sql jdbc


【解决方案1】:

我希望它返回我的数据库的原始顺序。

SQL 表代表无序 集合。 (实际上,在数学中,集合总是无序的。)SQL 结果集是无序的 *除非您为最外层的select 显式包含order by 子句。

因此,您需要包含订单。

大多数设计良好的数据库的每一行都有一个自动递增的 id。如果你的有这个,那么很容易按插入顺序得到结果集:

SELECT Username
FROM UserInfo
ORDER BY UserId;  -- assuming `UserId` is an auto-incremented column

如果你想要按字母顺序,那么你会使用:

ORDER BY Username

如果您想要更好的性能,那么您可以在用于order by 的键上定义一个索引。

【讨论】:

  • 我没有 user_id 列?还有其他建议吗?
  • @FranklinMemet 。 . .如果你想要按字母顺序排列,无论如何你都想要order by UserName
  • @GordonLinoff OP 不想要字母顺序:我希望它返回我数据库的原始顺序
  • @Jens 。 . .由于问题的标题,这有点难说。
  • @Jens 虽然没有原始顺序之类的东西,但对于索引组织的表,您可能有一个确定性的顺序,具体取决于查询优化器使用的访问路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
相关资源
最近更新 更多