具有空参数的准备语句

时间:2014-06-23 10:53:15

标签: java sql prepared-statement

我正在开发一个简单的数据库程序,可以轻松选择查询。

本程序使用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));

等等。

参数是一个带有文本框参数的ArrayList。

2 个答案:

答案 0 :(得分:2)

如果没有为“filtered”列指定参数,则不要以任何方式过滤列。 动态准备查询以仅包含指定的参数。

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());
}

答案 1 :(得分:0)

正如@juergen指出的那样,你的sql语句无效,因为它中有多个where子句:

  

选择*来自t_person,其中user_a =? &#34; +&#34; AND其中dasatz_a =? &#34; +   &#34; AND user_g =?

应该是:

  

选择*来自t_person,其中user_a =? AND dasatz_a =? AND user_g =   ?

此外,使用'*'会产生user_a字面为*的值。如果您想要使其成为通配符搜索,则语法必须更改为LIKE(而不是等于)并使用'%'而不是'*'

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