我有一個自定義的Java查詢引擎,它可以生成一串SQL(包含?作爲數據佔位符)以及包含要綁定到佔位符的數據的對象列表。然後將其傳遞給JDBCTemplate.queryForList(sql,bindings.toArray())API以生成結果集。將SQL和綁定數據轉換爲直接SQL
這工作正常,但我也需要在子查詢中使用此SQL,並不能找出一個(簡單的方法)從此轉換爲直接SQL(使用Java類型和數據庫友好格式之間的適當數據庫轉換等)。
是否有工具可以做到這一點?
我有一個自定義的Java查詢引擎,它可以生成一串SQL(包含?作爲數據佔位符)以及包含要綁定到佔位符的數據的對象列表。然後將其傳遞給JDBCTemplate.queryForList(sql,bindings.toArray())API以生成結果集。將SQL和綁定數據轉換爲直接SQL
這工作正常,但我也需要在子查詢中使用此SQL,並不能找出一個(簡單的方法)從此轉換爲直接SQL(使用Java類型和數據庫友好格式之間的適當數據庫轉換等)。
是否有工具可以做到這一點?
你可能想看看下面的工具。
http://commons.apache.org/dbutils/
儘管這不會直接回答您的問題,但它在將來可能會有用。我也碰到過這個問題,並且我設計了一種方法,雖然不是最好的,但對我有用。我創建了一個方法,可以按照您的建議自動填充參數中的值,但它不會以類型安全的方式進行填充。不管怎麼說,也許你可以採取的方法和改進它,如果你決定使用它:
public static String preparedQueryString(String staticQuery, Object... parameters) {
for(Object curParameter : parameters) {
if(curParameter instanceof String) {
staticQuery = staticQuery.replaceFirst("\\?", "'" + curParameter.toString() + "'");
} else {
staticQuery = staticQuery.replaceFirst("\\?", curParameter.toString());
}
return staticQuery;
}
您可能還需要添加代碼,以確保參數的數量不超過問號的數量你也可能想讓java類型更適合你使用的數據庫。我使用它來輸出PreparedStatement的SQL,因爲PreparedStatement沒有任何好的功能,可以在設置適當的參數後刪除完成的SQL查詢。
希望這會有所幫助,
我不明白這個問題。所以你有一個像這樣的SQL:`select name from names where id =?`。你想使用它作爲一個子查詢的含義 - 「選擇a.name,b.age從(選擇名稱,其中id =?)作爲一個,年齡b`和a.id = b.id? – CoolBeans 2011-02-16 01:32:13
我有「從名稱選擇名稱,其中id =?」和列表