2016-02-17 74 views
-2

我有一些代碼,從數據庫中檢索表&列名:使用HashMap來存儲數據庫中的表和列名

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

我在想,我可以用一個HashMap來存儲這些數據,其中, key是表名(它總是唯一的)和一個ArrayList來存儲該表中包含的列的列表。

如何遍歷ResultSet,以便爲每個表創建一個新的ArrayList,填充相關的列名稱,然後將該表名添加到HashMap中作爲關鍵字?

+0

*我有一些檢索表和列名的代碼... *然後將它添加到問題中。 – Manu

+0

@Manu請發現我添加了檢索數據的代碼,但是我並沒有將它包括在首位,因爲它只是將結果添加到ResultSet rs中,因此它沒有增加任何問題。 – user3091905

回答

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

sqluser是一個模式。模式中可能有數百個表 –

相關問題