我有一個 String 引數fruit,它應該接受逗號分隔的字串,例如:"Banana, Apple, Orange". 如何將此字串拆分為 3 個資料,"Banana", "Apple", "Orange"以便可以將其傳遞給下面的 SQL:
StringBuilder sql = new StringBuilder(
"SELECT * FROM fruit f where ");
if (!inputParameters.getFruit().isEmpty()) {
sql.append("f.name IN (:fruit) ");
parameterSource.addValue("fruit", inputParameters.getFruit());
)
}
在這里,我想傳遞已經轉換為 3 個資料getFruit的SQL IN子句中的值:"Banana", "Apple", "Orange"而不是僅 1 個字串資料"Banana, Apple, Orange"
uj5u.com熱心網友回復:
最簡單的方法是將整個"Banana, Apple, Orange"字串傳遞給 postgres,并讓 postgres 通過 string_to_array 和 unnest() 分解字串:
StringBuilder sql = new StringBuilder(
"SELECT * FROM fruit f where ");
if (!inputParameters.getFruit().isEmpty()) {
sql.append("f.name IN (SELECT UNNEST(string_to_array(:fruit, ', ')) ");
parameterSource.addValue("fruit", inputParameters.getFruit());
)
}
string_to_array將:fruit字串分解為陣列,并將UNNEST該陣列轉換為適合 IN 的記錄集
uj5u.com熱心網友回復:
在 SQL 中,字串文字需要用單引號字符括起來。因此,您想用以下內容替換:fruit(在 SQL 查詢的文本中)
'Banana','Apple','Orange'
換句話說,你不需要拆分 method 回傳的字串getFruit,你只需要稍微改變它。下面的代碼就是這樣做的。
String fruit = "Banana, Apple, Orange"; // value returned from method `getFruit`
String sql = "SELECT * FROM fruit f where f.name IN (:fruit)";
System.out.println(sql.replaceFirst(":fruit", fruit.replaceAll("([A-Z][a-z] )", "'$1'")));
運行上面的代碼會產生以下結果:
SELECT * FROM fruit f where f.name IN ('Banana', 'Apple', 'Orange')
uj5u.com熱心網友回復:
我認為這可以幫助你:
String oneStringFruit = "Banana, Apple, Orange";
StringBuilder sql = new StringBuilder("SELECT * FROM fruit f where f.name IN (");
String[] fruits = oneStringFruit.split(",");
Set.of(fruits).forEach(fruit -> sql.append("'").append(fruit.trim()).append("', "));
sql.replace(sql.lastIndexOf(","), sql.lastIndexOf(",") 1, ")");
System.out.println(sql);
享受!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326821.html
標籤:爪哇 sql 春天 PostgreSQL 弹簧 mvc
上一篇:對創建和更新方法的Rails驗證
下一篇:即使有序列,客戶ID也為空
