Java-使用SQL结果设置泛型表

Java-使用SQL结果设置泛型表,java,sql,design-patterns,Java,Sql,Design Patterns,下面您可以找到我用来从通用SQL语句检索表的代码(SQL代码由用户在代码的另一部分中输入)。 由于将来我将存储多个表,并且检索到的表将应用一些格式函数,因此我将值存储在: Map<String, Map<String,List<Object>>> tables = new HashMap<String, Map<String,List<Object>>>(); Map tables=newhashmap(); 第一个映射

下面您可以找到我用来从通用SQL语句检索表的代码(SQL代码由用户在代码的另一部分中输入)。 由于将来我将存储多个表,并且检索到的表将应用一些格式函数,因此我将值存储在:

Map<String, Map<String,List<Object>>> tables = new HashMap<String, Map<String,List<Object>>>();
Map tables=newhashmap();
第一个映射是表,第二个映射是列,最后列表保存每行数据

列名/顺序如下所示:

Map<String, TreeMap<Integer, String>> order = new HashMap<String, TreeMap<Integer, String>>();
Map order=newhashmap();
映射是表,树映射是列号-列名

创建非泛型表的代码为:

PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
for(int i = 1; i <= rsmd.getColumnCount(); i++){
    String name = rsmd.getColumnLabel(i); //Label vs name. Label is also what's defined by the user in: "as VENDA"
    answer.put(name, null);
    singleOrder.put(i, name);
}

while(rs.next()){
    Iterator answerIt = answer.entrySet().iterator();
    while (answerIt.hasNext()) { //Get Columns in index order to compare with body HashMap (unordered)
        Map.Entry columnNameValue = (Map.Entry)answerIt.next(); //key = columnName, value = List
        String columnName = (String) columnNameValue.getKey();


        List<Object> tmp = answer.get(columnName);
        if (tmp == null) {
            tmp = new ArrayList<Object>();
            answer.put(columnName, tmp);
        }

        Object item = rs.getObject(columnName);
        if(item instanceof Integer){
            item =  ((Integer) item).doubleValue();
        } else if (item instanceof Long){
            item =  ((Long) item).doubleValue();
        } else if (item instanceof BigDecimal){
            item =  ((BigDecimal) item).doubleValue();
        }
        tmp.add(item);

    }

}
PreparedStatement stmt=conn.prepareStatement(sql);
ResultSet rs=stmt.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();

对于(inti=1;i)你所说的“改进”是什么意思?你有什么具体的疑问吗?基准测试的结果不好吗?我真的不知道你对表格和列的表示是正面还是反面。你能给你的问题添加一个简单表格的例子,以及它在地图中的外观吗?我在@LukasEder做了一个小的更新。正如我所写的,我没有参考资料知道我所做的是否可以接受因为它可以工作,或者这与Java模式相反
Map<String, TreeMap<Integer, String>> order = new HashMap<String, TreeMap<Integer, String>>();

table1,
    1, "STORE"
    2, "SALES"
    3, "GOAL"
    4, "EXTRA"
Map<String, Map<String,List<Object>>> tables = new HashMap<String, Map<String,List<Object>>>();

"table1", 
    "STORE", 
        "unit1"
        "unit2"
        "unit3"
        "unit4"
    "SALES",
        1312
        126
        1361
        6823
    "GOAL"
        1300
        160
        1200
        6000
    "EXTRA"
        "info1"
        "info2"
        "info3"
        "info4"