for (Iterator it =  paramMap.keySet().iterator();it.hasNext();circleNum++)
{
    Object key = it.next();     
    sql_col.append(","+key);
  sql_value.append(",?");
  ParamInfo[circleNum]=paramMap.get(key);    
}
这里是有问题的,因为HashMap里面的数据是没有顺序的,所以你每次循环拼出的sql都不一样

解决方案 »

  1.   

    先谢了,这个可以改成LinkedHashMap解决
      

  2.   

    以下是我修改成LinkedHashMap后的代码:动态部分的数据类型都是统一的,请问有优化的地方吗?
     //指定基础信息
         Object[] baseInfo=new Object[]{"张三","28","天津"};
    StringBuffer sql_col=new StringBuffer("INSERT INTO table1(name,age,add");
    StringBuffer sql_value=new StringBuffer(" values(?,?,?");
    //paramMap为动态的信息,通过paramMap动态对应至表栏位,拼成全SQL
    Map paramMap=new LinkedHashMap();
    paramMap.put("Col_1", "Col1_Value");
    paramMap.put("Col_2", "Col2_Value");
    paramMap.put("Col_3", "Col3_Value");
    paramMap.put("Col_4", "Col4_Value");
    paramMap.put("Col_5", "Col5_Value");

    Object[] ParamInfo=new Object[paramMap.size()];
    int circleNum=0;
    for (Iterator it =  paramMap.keySet().iterator();it.hasNext();circleNum++)
    {
        Object key = it.next();     
        sql_col.append(","+key);
      sql_value.append(",?");
      ParamInfo[circleNum]=paramMap.get(key);    
    }
    sql_col.append(")");
    sql_value.append(")");

    //将变基础信息和动态信息数组整合成一个完成的变量数据数组
    Object[] result=new Object[baseInfo.length+ParamInfo.length]; 
    System.arraycopy(baseInfo,0,result,0,baseInfo.length); 
    System.arraycopy(ParamInfo,0,result,baseInfo.length,ParamInfo.length); 

    //拼成一个完整个SQL
    String sql=sql_col.toString()+sql_value.toString();

    System.out.println("sql:"+sql);

    for (int i=0;i<ParamInfo.length;i++)
    {
    System.out.println("ParamInfo["+i+"]:"+ParamInfo[i]);
    }
    //执行Insert
    return getJdbcTemplate().update(sql, result);