现在从数据库中取出所有的索引,因为是oracle,用DatabaseMetaData的getIndexInfo方法。比如说 第6(索引名)、8(序列号)、9(列名称),联合索引第6列相同的,第8、9都不一样。我目前把联合索引取出来,得到一个ResultSet对象 ,而这个ResultSet不是每个索引一行数据,而是每个索引的每个字段一行。
现在我的问题是:如何循环将同是一个索引的不同字段(也就是索引名相同而,序列号和列名称不同)取出来放在一个list里。也就是如何判断两行ResultSet是同一个联合索引的字段不知道说清楚了没,谢谢了

解决方案 »

  1.   

    实现Comparable 接口可以进行比较。
      

  2.   

    谁能给出实现方法呢?
    加入说有3个索引 其中2个是联合索引,分别关联了2个字段
    这样的话rs里就是5行记录但是实际上 我只要3个index 对象就好了Index index = new Index();
    while (rs.next()) {
    index.setName(rsgetString(9));
    请您帮忙的区域
    ********
    //把索引对象放入list
    indexList.add(index);
    }
      

  3.   

    我的做法是利用哈希算法实现比较首先实现一个使用HASH对键进行映射的数据存储类
    我的实现:
    public class SimpleHashList
    {
        private Map<String, List<Object>> dataMap = new HashMap<String, List<Object>>();
        
        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;
        }}然后在你的代码里面,用这个实现对关键字进行分组Index index = new Index(); 
    SimpleHashList hashList = new SimpleHashList();
    while (rs.next()) { 
    index.setName(rsgetString(9)); 
    请您帮忙的区域 
    **** 
    // 获取索引名称
    String key = rs.getString(6);**** 
    //把索引对象放入时限类
    hashList.put(key, index);
    }
    最后 获取这个存储数据的MAP 进行迭代就可以了。
      

  4.   

    还是没搞定,按照3楼的类,我的方法是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<Index> 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_CODEindexName=ONE_INDEX_CARROT
    字段名=ROLE_CODE
    indexName=UNION_INDEX_CARO
    字段名=ROLE_CODE
    字段名=ROLE_CODE
    字段名=ROLE_CODE
    indexName=UNION_INDEX_CARROT
    字段名=ROLE_CODE
    字段名=ROLE_CODE字段输入的时候还是正确的,输出就全一样了
      

  5.   

    hashList.put(INDEX_NAME, index); 
    你的目的不就是筛选这个相同的INDEX_NAME吗?但是
    如果映射以前包含了一个该键的映射关系,则旧值就会被替换,所以你只是放进去了最后一个
      

  6.   

    问题解决啦,index在循环外面new了 应该放在里面