当前位置: 代码迷 >> J2SE >> Spring jdbc 动态的将参数Insert 至对应的表栏位解决方法
  详细解决方案

Spring jdbc 动态的将参数Insert 至对应的表栏位解决方法

热度:310   发布时间:2016-04-23 20:17:14.0
Spring jdbc 动态的将参数Insert 至对应的表栏位
本个案例是通过Spring jdbc  动态的将参数Insert 至对应的表栏位,但感觉写的不是很好,
想请教一下大家通过Spring jdbc方式是否有更高效的写法?

----------------------------------------------------------------------------  

 //指定基础信息
     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 HashMap();
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);
------解决思路----------------------
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都不一样