有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将哈希映射放入另一个集合的java问题

  1. 在下面的代码中,当在循环内打印时,子hashmap显示正确的值,但当在循环外打印父hashmap时,子hashmap显示的是一个映射,其中只有上一个条目的值覆盖了所有值

        public void compareOracleMySQLData() throws SQLException {
        String inputTableName = ConfigurationManager.getProperty("table_name");
    
        int i = 0;
        int j = 0;
        int colCount = 0;
        int oracleRowCount = 0;
        int mysqlRowCount = 0;
        String primaryKeyIni = null;
        String appendStuff = null;
        Connection conO = DBManager.openDbConnection("mysql");
        Connection conM = DBManager.openDbConnection("mysql");
        Statement stmtO = null;
        Statement stmtM = null;
        ResultSet resultSetO = null;
        ResultSet resultSetM = null;
        ArrayList<String> primaryKeyList = new ArrayList<String>();
        Iterator<String> primaryKeyListItr = null;
        HashMap<Object, Object> oraRowDetailsMap = new HashMap<Object, Object>();
        HashMap<String, Object> mysqlRowDetailsMap = new HashMap<String, Object>();
        Map<String, Object> oraRowPrimaryMap = new HashMap<String, Object>();
        HashMap<String, HashMap<String, Object>> mysqlRowPrimaryMap = new HashMap<String, HashMap<String, Object>>();
    //  Map<String, Object> oraRowPrimaryMap=new HashMap<String, Object>();
    //  Map<String, Object> mysqlRowPrimaryMap=new HashMap<String, Object>();
        try {
            if (conO != null && conM != null) {
                if (validateTableStatus(inputTableName, conO, conM)) {
                    // Check table existence in Oracle and Mysql Database
    
                    // Create resultset for oracle
                    stmtO = conO.createStatement(
                            ResultSet.TYPE_SCROLL_INSENSITIVE,
                            ResultSet.CONCUR_READ_ONLY);
                    resultSetO = stmtO.executeQuery(DB_QUERY);
                    ResultSetMetaData rsMetaDataO = resultSetO.getMetaData();
    
                    //
    
                    // MySql details for the same table created
                    stmtM = conM.createStatement(
                            ResultSet.TYPE_SCROLL_INSENSITIVE,
                            ResultSet.CONCUR_READ_ONLY);
                    resultSetM = stmtM.executeQuery(DB_QUERY);
    
                    // Get Column Count for two tables
                    ResultSetMetaData rsMetaDataM = resultSetM.getMetaData();
                    logger.debug("Column Count in Oracle table ::"
                            + rsMetaDataO.getColumnCount());
                    logger.debug("Column Count in Mysql table ::"
                            + rsMetaDataM.getColumnCount());
                    // Match Column count of two tables
                    if (rsMetaDataM.getColumnCount() == rsMetaDataO
                            .getColumnCount()) {
                        logger.debug("The Column count in both table are same");
                        oracleRowCount = getRowCount(inputTableName, resultSetO);
                        mysqlRowCount = getRowCount(inputTableName, resultSetM);
                        logger.debug("No of Rows of Oracle Table :: "
                                + oracleRowCount);
                        logger.debug("No of Rows of Mysql Table :: "
                                + mysqlRowCount);
                        if (oracleRowCount != mysqlRowCount) {
                            logger
                                    .debug("The number of rows of Oracle and Mysql tables respectively differs");
    
                        }
    
    
    
                        else {
                            primaryKeyList = getPrimaryKey(inputTableName, conO);
    
                            while (resultSetO.next()) {
    
                                i = 0;
                                primaryKeyListItr = primaryKeyList.iterator();
                                while (primaryKeyListItr.hasNext()) {
    
                                    if (i == 0) {
                                        primaryKeyIni = (resultSetO
                                                .getObject(primaryKeyListItr
                                                        .next().toString()))
                                                .toString().trim();
    
    
                                    } else {
                                        appendStuff = (resultSetO
                                                .getObject(primaryKeyListItr
                                                        .next().toString()))
                                                .toString().trim();
                                        primaryKeyIni = primaryKeyIni + "$"
                                                + appendStuff;
    
                                    }
                                    i++;
    
                                }
    
                                // 
    
                                colCount = rsMetaDataO.getColumnCount();
                                for (j = 1; j <= colCount; j++) {
                                    System.out.println("Col Name"+rsMetaDataO
                                            .getColumnName(j));
                                    System.out.println("Col Value"+ resultSetO
                                            .getObject(rsMetaDataO
                                                    .getColumnName(j)));
                                    oraRowDetailsMap.put(rsMetaDataO
                                            .getColumnName(j), resultSetO
                                            .getObject(rsMetaDataO
                                                    .getColumnName(j)));
                                }
                                  System.out.println("primaryKeyIni"+primaryKeyIni);
                                System.out.println("oraRowDetailsMap inside loop"+oraRowDetailsMap);
                                oraRowPrimaryMap.put(primaryKeyIni,
                                        oraRowDetailsMap);
      }
       System.out.println("oraRowDetailsMap"+oraRowDetailsMap);System.out.println(oraRowPrimaryMap);
    
                }
    
                    } else {
                        logger.debug("The number of Columns of Oracle and Mysql table differs");
                    }
    
                }
            }
        }
    
        catch (SQLException e) {
            logger.debug("Error in CompareOracleMySQLData()" + e.getMessage());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            DBManager.closeConnection(conO);
            DBManager.closeConnection(conM);
            DBManager.closeStatement(stmtO);
            DBManager.closeStatement(stmtM);
            DBManager.closeResultSet(resultSetO);
            DBManager.closeResultSet(resultSetM);}}
    

二,。输出如下所示:

                      DEPLOYMENT_LEVEL is: DVL
DEBUG com.tsh.compass.intranet.dao.DbDao 18 Jun 2011 23:06:39 IST. - Connection    to      MYSQL  database established
DEBUG com.tsh.compass.intranet.dao.DbDao 18 Jun 2011 23:06:39 IST. - Connection to      MYSQL  database established
DEBUG com.tsh.compass.intranet.dao.DbDao 18 Jun 2011 23:06:39 IST. - Column Count in Oracle table ::4
DEBUG com.tsh.compass.intranet.dao.DbDao 18 Jun 2011 23:06:39 IST. - Column Count in Mysql table ::4
DEBUG com.tsh.compass.intranet.dao.DbDao 18 Jun 2011 23:06:39 IST. - The Column count in both table are same
DEBUG com.tsh.compass.intranet.dao.DbDao 18 Jun 2011 23:06:39 IST. - No of Rows of Oracle Table :: 3
DEBUG com.tsh.compass.intranet.dao.DbDao 18 Jun 2011 23:06:39 IST. - No of Rows of Mysql Table :: 3
Col NameFirst_Name
Col Valuefn
Col NameLast_Name
Col Valueln
Col NameAddress
Col Valueadr
Col NameCity
Col Valuecity
primaryKeyInifn$ln
oraRowDetailsMap inside loop{Address=adr, Last_Name=ln, First_Name=fn, City=city}
Col NameFirst_Name
Col Valuefn1
Col NameLast_Name
Col Valueln1
 Col NameAddress
Col Valueadr1
Col NameCity
Col Valuecity1
primaryKeyInifn1$ln1
 oraRowDetailsMap inside loop{Address=adr1, Last_Name=ln1, First_Name=fn1, City=city1}
Col NameFirst_Name
Col Valuefn3
 Col NameLast_Name
 Col Valueln3
 Col NameAddress
 Col Valueadr3
 Col NameCity
 Col Valuecity3
 primaryKeyInifn3$ln3
  oraRowDetailsMap inside loop{Address=adr3, Last_Name=ln3, First_Name=fn3, City=city3}
  oraRowPrimaryMap{fn3$ln3={Address=adr3, Last_Name=ln3, First_Name=fn3,        City=city3},    fn$ln={Address=adr3, Last_Name=ln3, First_Name=fn3, City=city3}, fn1$ln1=        {Address=adr3, Last_Name=ln3, First_Name=fn3, City=city3}}

共 (1) 个答案

  1. # 1 楼答案

    您只是对每一行重复使用相同的oraRowDetailsMap。难怪你在结果中反复出现同样的地图

    在结果集循环中使用Map<...> oraRowDetailsMap = new HashMap<...>();为每行创建一个新映射,而不是在循环之前只创建一次