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

时间:2016-02-17 10:15:16

标签: java arraylist hashmap resultset

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

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

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

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

2 个答案:

答案 0 :(得分: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"));
}

答案 1 :(得分:0)

您的代码应如下所示 -

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