2016-07-07 9 views
1

ProblemHashMaping in Java

Ich versuche, so etwas wie ein mehrdimensionales assoziatives Array zu erstellen. Aus irgendeinem Grund bekomme ich ähnliche Ergebnisse für alle Elemente in der Map. Im Folgenden finden Sie den Code i

bin mit
private HashMap<String, HashMap<String, String>> getNullableColumns(Connection dbConn, String resource) throws SQLException { 

    HashMap<String, HashMap<String, String>> nullableColumns = new HashMap<String, HashMap<String, String>>(); 
    HashMap<String, String> column = new HashMap<String, String>(); 
    DatabaseMetaData dm = dbConn.getMetaData(); 
    ResultSet rsColumns = dm.getColumns(null, null, getTable(resource), null); 
    while(rsColumns.next()) 
    { 
     String type = rsColumns.getString("TYPE_NAME"); 
     String nullable1 = rsColumns.getString("NULLABLE"); 
     String nullable2 = rsColumns.getString("IS_NULLABLE"); 
     String dataType = rsColumns.getString("DATA_TYPE"); 
     String columnName = rsColumns.getString("COLUMN_NAME"); 

     column.put("type", type); 
     column.put("nullable", nullable1); 
     nullableColumns.put(columnName, column); 

    } 
    return nullableColumns; 

} 

Explaination:

ich das richtige Ergebnis in Spalte HashMap bekommen, aber wenn ich jeweils in nullableColumns auf sie setzen, alle Elemente haben die gleiche Eigenschaft auf Das Ende, zum Beispiel alle Felder sind Typ varchar und nullable ist 0. Es sieht so aus, als würde ich das Ergebnis am Ende irgendwie übersteuern, aber wo ich diesen Fehler mache, konnte ich nicht herausfinden.

Irgendwelche Vorschläge bitte?

Antwort

4

Sie fügen die gleiche HashMap Instanz

HashMap<String, String> column = new HashMap<String, String>(); 

mehrfach an der äußeren Map, so dass alle Werte in der nullableColumnsMap sind die gleichen HashMap Instanz.

Sie ein neues HashMap in jeder Iteration der Schleife erstellen soll:

while (rsColumns.next()) 
    column = new HashMap<String, String>(); 

    String type = rsColumns.getString("TYPE_NAME"); 
    String nullable1 = rsColumns.getString("NULLABLE"); 
    String nullable2 = rsColumns.getString("IS_NULLABLE"); 
    String dataType = rsColumns.getString("DATA_TYPE"); 
    String columnName = rsColumns.getString("COLUMN_NAME"); 

    column.put("type", type); 
    column.put("nullable", nullable1); 
    nullableColumns.put(columnName, column) 
}