![](/img/trans.png)
[英]Null Pointer Exception in Method Which Sets the Parameters for Prepared Statement
[英]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)並使用'%'
而不是'*'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.