2016-02-03 92 views
0

我有關於使用JdbcTemplate進行動態查詢的一個問題。使用JdbcTemplate進行動態查詢

我的代碼如下:

String insertQueries = "INSERT INTO " + tablename; 

StringJoiner joiner = new StringJoiner(","); 
StringJoiner joiner1 = new StringJoiner(","); 
StringJoiner joiner2 = new StringJoiner(","); 

while (mapIterator.hasNext()) { 
     Map.Entry mapEntry = (Map.Entry) mapIterator.next(); 
     key = joiner.add((String) mapEntry.getKey()).toString(); 
     // value = joiner1.add("\"" + (String) mapEntry.getValue() + "\"").toString(); 
     value = joiner1.add("\"" + (String) mapEntry.getValue() + "\"").toString(); 
     value1 = joiner2.add("?").toString(); 
} 

insertQueries += " (" + key + ")"; 
insertQueries += " VALUES ("+value1+")" ; 

int row = jdbcTemplate.update(insertQueries, value); 

現在我的問題是,我想同樣數量的「價值」按自動生成插入查詢問號。

眼下,變量的值,認爲作爲一個字符串,所以如果我有2個或更多的問號,然後在變量值只有一個完整的字符串逗號分隔,所以它不能正常工作。

見下面我的查詢:

INSERT INTO tablename (fname, lname) VALUES ("abc, xyz") ; 

而且我想如下:

INSERT INTO tablename (fname, lname) VALUES ("abc", "xyz") ; 

回答

1
**StringJoiner joiner2 = new StringJoiner(",", "(", ")");** 
while (mapIterator.hasNext()) { 

//change in value1 as 
value = "\"" + (String) mapEntry.getValue() + "\""; 
value1 = joiner2.add(value); 
myvalue = joiner2.add("?"); 

}

//change insertQueries as with value as (? ,?) 
insertQueries += " VALUES "+ myvalue+"" ; 


//get value1 as ("abc", "xyz") 

//update query as 
int row = jdbcTemplate.update(insertQueries, value1); 
+0

謝謝你的答覆。 但我想代碼等作爲下面: insertQueries = INSERT INTO表名(FNAME,L-NAME)VALUES;(?,?) 我的代碼會像: jdbcTemplate.update(insertQueries,值); 以逗號分隔的值動態生成。 請指教。 –

+0

嗨, 對不起,它仍然無法正常工作。 它仍然給出錯誤,如: PreparedStatementCallback;錯誤的SQL語法[INSERT INTO tablename(last_name,first_name)VALUES(?,?)];嵌套的異常是java.sql.SQLException中:沒有爲參數2 –

+0

請硬編碼jdbcTemplate.update(insertQueries,值1)指定的,這樣我可以理解更新方法 –