我有一些代码可以检索表&数据库中的列名:
PreparedStatement p = conn.prepareStatement(
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'SQLUser'");
rs = p.executeQuery();
我在想我可以使用HashMap来存储这些数据,其中键是表名(总是唯一的),还有一个ArrayList来存储该表中包含的列列。
如何遍历ResultSet以便为每个表创建一个新的ArrayList,填充相关的列名,然后使用该表名作为键添加到HashMap中?
答案 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)));
}