2012-01-22 56 views
1

目前,我有這樣的:建議構建SQL字符串用的JdbcTemplate

MyObject myObject = getJdbcTemplate().queryForObject("select * from my_objects where id = ?", 
       new Object[]{new Integer(id)}, 
       new MyObjectRowMapper()); 

現在在我的方法,我想通過枚舉:

SortOrder.ASC 
SortOrder.DESC 

那麼它要麼是:

ORDER BY ID ASC 

ORDER BY ID DESC 

因此,在sql字符串中,我只是添加另一個'?'或者我必須建立像這樣的字符串:

"select * from abc ORDER BY ID " + sortOrder; 

是否有一種首選方式?

+0

SQL查詢的字符串連接有風險,'sortOrder'必須清理**非常好。 –

+0

@TomaszNurkiewicz不在我的情況下,因爲它只在後端完成,而不是通過最終用戶的輸入。 – Blankman

回答

0

您無法更改PreparedStatements中的查詢,因此您無法使用?對於ascdesc。我認爲串聯是你可以使用的最簡單的方法。

+0

我必須糾正它,據我所知大多數DBMS(Oracle,MySQL,...)不支持查詢結構中準備好的語句位置持有者。我不確定也許有些支持。 –

2

您必須使用第二種方法。準備好的聲明不僅僅是「通過字符串查詢替換佔位符」。所有參數都必須是鍵入值,以便插入到查詢生成的語法樹中。您無法將查詢的一部分作爲參數傳遞。