为了解决这个问题,可以使用“命名参数”,sql参数是由一个冒号开始后续定义的名称,而不是位置。在另外的,命名参数只是在simplejdbctemplate类和namedparameterjdbctemplate支持。
//insert with named parameter
public void insertnamedparameter(customer customer){
string sql = "insert into customer " +
"(cust_id, name, age) values (:custid, :name, :age)";
map<string, object> parameters = new hashmap<string, object>();
parameters.put("custid", customer.getcustid());
parameters.put("name", customer.getname());
parameters.put("age", customer.getage());
getsimplejdbctemplate().update(sql, parameters);
}
public void insertbatchnamedparameter(final list<customer> customers){
string sql = "insert into customer " +
"(cust_id, name, age) values (:custid, :name, :age)";
list<sqlparametersource> parameters = new arraylist<sqlparametersource>();
for (customer cust : customers) {
parameters.add(new beanpropertysqlparametersource(cust));
}
getsimplejdbctemplate().batchupdate(sql,
parameters.toarray(new sqlparametersource[0]));
}
public void insertbatchnamedparameter2(final list<customer> customers){
sqlparametersource[] params =
sqlparametersourceutils.createbatch(customers.toarray());
getsimplejdbctemplate().batchupdate(
"insert into customer (cust_id, name, age) values (:custid, :name, :age)",
params);
}