2010-11-08 2 views
0

Я пытаюсь написать условное пакетное вставку, основанное на Java параметрах, напримерSpring 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); 

Это, очевидно, не работает, и самый близкий пример, который я нашел включает выбор значений INSERT из таблиц вместо аргументов List, которые мне нужны. Как я могу ссылаться на параметры Object [] как часть значений INSERT?

спасибо.

ответ

1

Я бы сказал, что вы должны переместить это условие в отдельный SELECT.

+0

Можете ли вы привести пример? Проблема с SELECT заключается в том, что я считаю, что мне нужно ссылаться на значения таблиц, тогда как я просто хочу ссылаться на переменные параметра java. – meiguoren

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 
Смежные вопросы