现在从数据库中取出所有的索引,因为是oracle,用DatabaseMetaData的getIndexInfo方法。
比如说 第6(索引名)、8(序列号)、9(列名称),联合索引第6列相同的,第8、9都不一样。
我目前把联合索引取出来,得到一个ResultSet对象 ,而这个ResultSet不是每个索引一行数据,而是每个索引的每个字段一行。
现在我的问题是:
如何循环将同是一个索引的不同字段(也就是索引名相同而,序列号和列名称不同)取出来放在一个list里。
也就是如何判断两行ResultSet是同一个联合索引的字段
目前的方法是使用HASH对键进行映射的数据存储类
public class SimpleHashList
{
private Map > dataMap = new HashMap >();
public void put(String key, Object value)
{
List <Object> valList = dataMap.get(key);
if (valList == null)
{
valList = new ArrayList <Object>();
}
valList.add(value);
dataMap.put(valList);
}
public List <Object> get(String key)
{
return dataMap.get(key);
}
public Map <String, List <Object>> getDataMap()
{
return dataMap;
}
}
实现中出现的问题:
while (rs.next()) {
String INDEX_NAME = indexResultSet.getString("INDEX_NAME");
index.setName(INDEX_NAME );
index.setMColumnStr(COLUMN_NAME);
System.out.println("COLUMN_NAME="+COLUMN_NAME);
hashList.put(INDEX_NAME, index);
}
aMap =hashList.getDataMap();
Iterator keys=aMap.keySet().iterator();
while (keys.hasNext()) {
String indexName = (String) keys.next();
System.out.println("indexName="+indexName);
List indexList=aMap.get(indexName);
for (int i = 0; i < indexList.size(); i++) {
Index index1 = indexList.get(i);
//if(i==index1.getSeq())
System.out.println("字段名="+index1.getMColumnStr());
}
}
打印输出是
COLUMN_NAME=SEQ
COLUMN_NAME=SHORT_NAME
COLUMN_NAME=ROLE_ID
COLUMN_NAME=LEVELS
COLUMN_NAME=ROLE_ID
COLUMN_NAME=ROLE_CODE
indexName=ONE_INDEX_CARROT
字段名=ROLE_CODE
indexName=UNION_INDEX_CARO
字段名=ROLE_CODE
字段名=ROLE_CODE
字段名=ROLE_CODE
indexName=UNION_INDEX_CARROT
字段名=ROLE_CODE
字段名=ROLE_CODE
字段输入的时候还是正确的COLUMN_NAME,输出“字段名”就全一样了,都是最后一个