使用’%’作为SQL中带Java的参数中的通配符

所以在我的课程中我有:

    private static final String GET_USERS_BY_PARAMS = "select * from user t "
        + "where t.id like %?% "
        + "AND t.name LIKE %?% "
        + "AND t.location LIKE %?% " 
        + "AND t.telephone LIKE %?% ";

上面给出的所有参数都作为varchar存储在数据库中.

但是当我运行以下内容时:

statement = connection.prepareStatement(GET_USERS_BY_SEARCH_PARAMS);
            statement.setString(1, userID);
            statement.setString(2, name);
            statement.setString(3, location);
            statement.setString(4, telephone());

            rs = statement.executeQuery();

我得到一个SQL异常,说明存在无效字符.应用程序在executeQuery上抛出错误,因此设置params不是问题.我想知道这是否归结为使用%符号,我包括在内,这样您就可以搜索而无需输入确切的用户ID,名称等.

在此先感谢您的帮助!

解决方法:

通配符必须是传递给预准备语句的值的一部分.所以你需要这样的东西:

private static final String GET_USERS_BY_PARAMS = "select * from user t "
    + "where t.id like ? "
    + "AND t.name LIKE ? "
    + "AND t.location LIKE ? " 
    + "AND t.telephone LIKE ? ";

statement = connection.prepareStatement(GET_USERS_BY_SEARCH_PARAMS);
statement.setString(1, "%" + userID + "%");
statement.setString(2, "%" + name + "%");
statement.setString(3, "%" + location + "%");
statement.setString(4, "%" + telephone() + "%");

顺便说一句:user.id的数据类型是什么?

如果这是一个数值,LIKE将无法正常工作.您可能应该明确地将ID转换为字符值:to to_char(t.id)like?

上一篇:PLSQL编程


下一篇:使用jOOQ执行PL / SQL函数时的Java空指针