簡體   English   中英

具有空參數的准備語句

[英]Prepared Statement with Null Parameters

我正在開發一個簡單的數據庫程序,可以輕松選擇查詢。

本程序使用GUI,您可以在其中輸入搜索參數。 如果未輸入所有參數,則查詢結果將完成這些參數。 所以我試圖檢查文本框中的參數是否為空/ null並將占位符設置為“*”。

但當我試圖跑。 即使使用編程的占位符,它也會給我一個SQLException語法錯誤。

我將發布一個短代版本的整個代碼巫婆技術是相同的。

PreparedStatement Statement = connection.prepareStatement("select * From t_person where user_a = ? "+ "AND where dasatz_a = ? " + "AND where user_g = ? ");

if (Parameter.get(0) == null) {
    Parameter.set(0, "*") };

Statement.setString(1, Parameter.get(0));

等等。

參數是帶有Textboxes參數的ArrayList。

如果沒有為“過濾”列指定參數,則不要以任何方式過濾列。 動態准備查詢以僅包含指定的參數。

Map<Integer, String> statementParams = new HashMap<>();
String query = "select * From t_person";
boolean firstCondition = true;

if (Parameter.get(0) != null) {
    if (firstCondition) {
        query += " where ";
        firstCondition = false;
    } else {
        query += " and ";
    }
    query += "user_a = ?";
    statementParams.put(1, Parameter.get(0));
}
// other params
PreparedStatement Statement = connection.prepareStatement(query);

for (MapEntry<Integer, String> entry : statementParams.entrySet()) {
    Statement.setString(entry.getKey(), entry.getValue());
}

正如@juergen指出的那樣,你的sql語句是無效的,因為它有多個where子句:

select * from t_person where user_a =? “+”和其中dasatz_a =? “+”AND其中user_g =?

應該:

select * from t_person where user_a =? AND dasatz_a =? AND user_g =?

此外,使用'*'將導致user_a字面上為*值。 如果您想要使其成為通配符搜索,則語法必須更改為LIKE(而不是equals)並使用'%'而不是'*'

http://www.w3schools.com/sql/sql_wildcards.asp

暫無
暫無

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

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