使用';%';作为SQL with Java中参数中的通配符

使用';%';作为SQL with Java中参数中的通配符,java,sql,oracle,plsql,Java,Sql,Oracle,Plsql,因此,在我的计划中,我有: 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 %?% "; 上面给出的所有参数都作为va

因此,在我的计划中,我有:

    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上抛出错误,因此设置参数不是问题。我想知道这是否是因为使用了我包含的%符号,这样您就可以在不必输入确切的用户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强制转换为字符值:
where to_char(t.ID)like?

使用
CONCAT
函数,它会像这样工作:
like CONCAT(“%”,?,“%”)


或者您也可以使用
LIKE('%'| |?| |'%')

您可以使用串联运算符编写

LIKE ('%' || ? || '%')

非常感谢所有回答的人:)有时候我讨厌我只能接受一个!用户id是一个字符串,例如“user_1234”,因此它工作得很好,但感谢您提供更多信息!