2010-11-08 58 views
0

我想编写一个基于Java的参数条件批量插入,例如春天JDBC模板条件插入

List<Object[]> params = new ArrayList(); 
params.add(new Object[]{1, 2, 3}); 

getSimpleJdbcTemplate.batchUpdate(
"INSERT INTO SomeTable(colA, colB, colC)" + 
" VALUES(?, ?, ?)" + 
" WHERE EXISTS (// some condition)", params); 

这显然是不行的,我已经找到了最接近的例子涉及 选择插入值从表中,而不是List参数,这是我需要的。如何作为INSERT值的一部分引用Object []参数?

谢谢。

回答

1

我想说,你应该在单独的SELECT中移动这个条件。

+0

你能提供一个例子吗? SELECT的问题是我相信我必须引用表值,而我只想引用参数java变量。 – meiguoren 2010-11-09 04:05:58

0

作为你的榜样,你应该尝试下面的语法和SimpleJdbcOperations.update方法:

getSimpleJdbcTemplate.update(
    " INSERT INTO SomeTable(colA, colB, colC)" + 
    " SELECT srcA, srcB, srcC" + 
    " FROM src_table" + 
    " WHERE EXISTS (// some condition)", 
    params 
); 

此外,我一直在使用StringTemplate为代动态SQL的。这是我用过的最好的语言。

为例(如StringTemplate的语法):

StringTemplate tmpl = new StringTemplate(
    " SELECT *" + 
    " FROM some_table" + 
    " WHERE 1 = 1" + 
    "$search_age:{ AND age = ?}$" + 
    "$search_name:{ AND name = ?}$" 
); 


/** 
* if param_age is not null, "AND age = ?" would be included in argumented sql, 
* same as param_name 
*/ 
tmpl.setAttribute("age", param_age); 
tmpl.setAttribute("name", param_name); 
// :~) 

String sqlTmpl = tmpl.toString(); // final SQL generated