簡體   English   中英

在Groovy中如何從不帶“ $ {str}”的字符串創建GString

[英]How to create GString from String without “${str}” in Groovy

我有來自Java的String變量(例如str ),它存儲了一些GString表達式,比如說"SELECT ${path} path FROM dual" from "SELECT ${path} path FROM dual" ,這絕對是來自用戶輸入的動態字符串,我不知道有多少${}將在那里。

而且我不希望通過使用PreparedStatement的當前綁定在評估${path}sql.rows()使用它。

問題是:

  1. 如果我不以某種方式將str轉換為GString ,它將拋出SQLException ,因為沒有PreparedStatement我們需要在'${path}'周圍使用引號。 但這是不安全的,並且Groovy會生成警告(我們應該使用PreparedStatement並刪除引號)。
  2. 如果我將str轉換為GStringsql.rows("${str}") ,那么Groovy將使用絕對錯誤的僅包含"?"預處理語句"?" 當然,這將無法正常工作,我需要聲明: "SELECT ? path FROM dual"

問題是如何從String獲取GString而不用"${}"將其包裝? 或者我們如何僅評估GString第一級(僅str而不是path )? 或如何以其他方式解決此問題?

謝謝。

根據信息,我建議以下一半解決方案:

def gsring = Eval.me('"'+str.replaceAll("\"","\\"")+'"')

它將所有的雙引號替換為轉義的quto,然后將整個對象評估為GString。 只要在值部分中不使用雙引號,就可以使用。 然后可以將gstring用於Sql。 該解決方案與GROOVY-2505中的前兩個評估示例基本相同。 馬歇爾錯過的重要一點顯然是我們需要將字符串內容包裝在引號中。 /“ str” /當然會產生一個字符串“ str”。 例如,如果str是SELECT,則將產生“ str”。 我們想要的是'“'+ str +'”“',它將給出“ SELECT”。 它必須是雙引號,因為我們希望通過Eval調用來評估gstring部分,這在單引號字符串中不可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM