使用 HashMap 存储数据库 table & 列名

Using a HashMap to store database table & column names

我有一些代码可以从数据库中检索 table 和列名:

PreparedStatement p = conn.prepareStatement(
    "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'SQLUser'");
rs = p.executeQuery();

我在想我可以使用 HashMap 来存储这些数据,其中键是 table 名称(它始终是唯一的)和一个 ArrayList 来存储包含在 table.

如何遍历 ResultSet,以便为每个 table 创建一个新的 ArrayList,用相关的列名称填充,然后使用该 table 名称作为键添加到 HashMap?

你可以这样使用:

Map<String, List<String>> map = new HashMap<String, List<String>>();
ResultSet rs = st.executeQuery(sql);        
while (rs.next()) { 
    String table = rs.getString("table_name"));
    ArrayList<String> columns = map.get(table);
    if (columns == null) {
        columns = new ArrayList<String>();
        map.put(table, columns)
    }
    columns.add(rs.getString("column_name"));
}

您的代码应如下所示 -

Map<String, List<String>> tableMap = new HashMap<String, List<String>>();
ArrayList<String> columnList = new ArrayList<String>();

PreparedStatement p = conn.prepareStatement(
    "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'SQLUser'");

ResultSet rs = p.executeQuery();
while (rs.next()) {
    String columnName = rs.getString("COLUMN_NAME"));
    columnList.add(columnName);
}                   
tableMap.put("SQLUser", columnList);

您还可以使用 ResultSetMetaData 从 table 中获取列名。

ResultSet resultSet = st.executeQuery("Select * from SQLUser")
ResultSetMetaData metaData = resultSet.getMetaData();
int count = metaData.getColumnCount(); 
List<String> columnList = new ArrayList<String>();
for (int i = 1; i <= count; i++) {
   columnList.add(metaData.getColumnLabel(i))); 
}