我正在尝试从数据库表中检索所有列名,但只返回“[COLUMN_NAME]”?

问题描述 投票:0回答:1

出于某种原因只返回

[COLUMN_NAME]
?它连接到在本地主机上运行的 MySQL 数据库。

这是我的代码:

public static String[] getCol() throws Exception {
    try {
        Connection con = dbc.getConnection();
        PreparedStatement statement = con.prepareStatement("select column_name from information_schema.columns where table_name='particles'");
        ResultSet result = statement.executeQuery();
        ResultSetMetaData rs =  result.getMetaData();
        int count = rs.getColumnCount();
        String[] ColName = new String[count];
        String[] COLS;
        for (int i=1 ; i <= count; i++) {
            ColName[i-1] = rs.getColumnName(i);
        }
        System.out.println(Arrays.toString(ColName));
        return ColName;
    } catch(Exception e) {
        System.out.println(e);
    }
    return null;
}
java mysql database-schema
1个回答
0
投票

column_name
的每个值都将位于单独的row 上。您的查询的预期回报将是一个像

这样的结果集
column_name
-----------
id
name
weight
charge
flavor
spin

要获取查询返回的实际值,您需要遍历结果集的行,就像从返回的任何其他结果集中获取行一样。

您显示的代码仅查看结果的元数据...分配给

resultset
中列的名称。在这种情况下,结果集包含一个列,名称为
column_name
。这就是为什么您正在观察您报告的行为。

如果您的查询已写

 SELECT column_name AS foo
   FROM information_schema.columns
  WHERE table_name='particles'

您会看到

foo
作为列名,而不是
column_name

结果集的 rows 中的 values 恰好是列名对于 SQL 来说并不重要......就 SQL 而言,查询返回一组 rows,一个单列values。是的,它恰好是关于表中列的元数据(因为您正在针对名为

information_schema.columns
的特殊视图运行查询)但是该查询的返回值实际上与您运行任何其他返回 VARCHAR 的查询没有什么不同来自任何其他表的列。例如:

SELECT mystringcol FROM mytable

如果您在代码中使用该查询,结果集的元数据将是一个单独的列,名称为

mystringcol
。而且您的代码不会对结果集中返回的 rows 做任何事情,即 mystringcol 的实际值。

© www.soinside.com 2019 - 2024. All rights reserved.