问题
我正在尝试使用 Java 中的 HashMap 创建类似于多维关联数组的东西。出于某种原因,我得到了 map 内所有元素的相似结果。以下是我正在使用的代码
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;
}
解释:
我在 HashMap 列中得到了正确的结果,但是当我将它们中的每一个放入 nullableColumns 时,所有元素最后都具有相同的属性,例如,所有字段的类型都是 varchar 并且 nullable 是 0。看起来我最后我以某种方式覆盖了结果,但我不知道我在哪里犯了这个错误。
有什么建议吗?
最佳答案
您正在添加相同的 HashMap
实例
HashMap<String, String> column = new HashMap<String, String>();
多次到外层Map
,所以nullableColumns
Map
中的所有值都是相同的HashMap
实例。
您应该在循环的每次迭代中创建一个新的 HashMap
:
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)
}
关于java - Java 中的 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252317/