【问题标题】:Using a HashMap to store database table & column names使用 HashMap 存储数据库表和列名
【发布时间】:2016-02-17 10:15:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我有一些代码可以检索表名和列名...然后将其添加到问题中。
  • @Manu 请发现我添加了检索数据的代码,但是我没有首先包含它,因为它不会对问题添加任何内容,因为它只会将结果添加到 ResultSet rs .

标签: java arraylist hashmap resultset


【解决方案1】:

你可以这样使用:

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"));
}

【讨论】:

    【解决方案2】:

    您的代码应该如下所示 -

    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 从表中获取列名。

    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))); 
    }
    

    【讨论】:

    • sqluser 是一个模式。一个模式中可能有数百个表
    猜你喜欢
    • 2016-04-26
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多