簡體   English   中英

從Java中的連接SQL字符串移到PreparedStatement

[英]Moving to PreparedStatement from concatenating SQL string in Java

假設我有一個表單,並根據用戶在表單中填寫的字段,使用Java字符串和諸如“ field1 ='A'和field2 ='B'之類的子句的連接,在Java代碼中創建SQL語句。 field3 ='C'“,等等。如果未填寫該字段,則跳過此部分,而不將其添加到我的Java SQL字符串中,從而接受數據庫表中該字段中的任何值。 有人告訴我,串聯SQL字符串是一種不好的做法,我應該使用PreparedStatement而不是直接執行executeQuery。 在這種情況下,如何為表單中當前字段的每個組合創建單獨的PreparedStatement而不怎么做?

首先,在遠離將字符串與字段值連接在一起方面做得很好。 您只是擺脫了討厭的SQL注入攻擊。

您希望使用與以前相同的邏輯-相同的if語句集,並且僅向存在該字段的SQL添加子句。 您可能想要StringBuilder建立SQL,並希望ArrayList<String>存儲參數值,直到准備使用它們為止。 您可能最終會遇到很多看起來像這樣的塊。

if (! field1Text.equals("")) {
    sql.append(" and field1 = ?");
    params.add(field1Text);
}

然后,最后,在創建PreparedStatement ,將遍歷參數列表,為每個參數調用setString

考慮使用諸如QueryDSL或JOOQ之類的框架。

暫無
暫無

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

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