出于某种原因只返回
[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;
}
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 的实际值。