【问题标题】:MySQL command SELECT values in column - JDBCMySQL 命令 SELECT 列中的值 - JDBC
【发布时间】:2012-11-26 12:16:44
【问题描述】:

我通过 JDBC (Java) 使用 MySQL 命令来更改我的数据库。我已经实现了以下方法来返回列的值。目标是使列(行)中的位置与它们在数组中的位置(索引)相对应。这适用于字符串列,但对于数字列,ResultSet 似乎将它们按升序排列,从而使它们在返回的字符串数组中的位置不反映它们在列中的位置。 'rs' 是一个 ResultSet 引用变量。

public String[] getColumnContents(String tableName, String columnName) {
    String sql = "SELECT " + columnName + " FROM " + tableName;
    String[] results = new String[SQLManager.getColumnLength(tableName, columnName)];

    try {
       rs = statement.executeQuery(sql);

       for (int counter = 0; rs.next(); counter++) {
            results[counter] = rs.getString(columnName);
       }

    } catch (SQLException e) {
       e.printStackTrace();
    }

    return results;

}

【问题讨论】:

  • 当您处理数字列时,为什么要使用 rs.getString ?
  • 因为该方法用于返回多种数据类型的列的值。
  • 你可以使用 getObject() 代替
  • getColumnLength() 到底是做什么的?循环中的计数器对查询返回的 rows 进行计数。您无法知道 ResultSet 将返回多少行,所以我怀疑 getColumnLengt() 是否真的计算了 rows 的数量。在处理来自数据库的结果集时,您应该使用动态调整的List 而不是固定大小的数组。

标签: java mysql sql database jdbc


【解决方案1】:

就像在 SQL 命令中添加 ORDER BY 子句一样简单。这是我的工作方法:

public String[] getColumnContents(String tableName, String columnName) {
String sql = "SELECT " + columnName + " FROM " + tableName + " ORDER BY " + columnName1 + " ASC, " + columnName2 + " ASC";

String[] results = new String[SQLManager.getColumnLength(tableName, columnName)];

try {
    rs = statement.executeQuery(sql);

    for (int counter = 0; rs.next(); counter++) {
        results[counter] = rs.getString(columnName);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

return results;

}

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多