2010-11-08 52 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