【问题标题】:Using Oracle "starts with" query logic and java PreparedStatement at the same time [duplicate]同时使用Oracle“开始于”查询逻辑和java PreparedStatement [重复]
【发布时间】:2018-12-15 21:27:05
【问题描述】:

我有一个 Oracle 查询:

select *
from part
where part_number like 'PDM%'

这将导致每个零件都有一个以“PDM”开头的零件编号(阅读:https://stackoverflow.com/a/11586236/963076)。

我想用 Java PreparedStatement 执行这个查询,这样我就可以用任何文本替换“PDM”。所以,我创建了这个方法:

String sql = "select * \n" +
    "from part \n" +
    "where part_number like '?%' \n";

try(PreparedStatement p_stmt = conn.prepareStatement(sql)) {

    p_stmt.setString(1, "PDM");

    ResultSet results = p_stmt.executeQuery();

    while(results.next()) {
        System.out.println(results.getString("part_number"));
    }
}

但是,这会导致错误:

java.sql.SQLException: Invalid column index
at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5321)
at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5309)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setString(OraclePreparedStatementWrapper.java:280)
at [my stack trace]

我认为,问题在于PreparedStatement 正在寻找问号? 本身。但是我需要 % 来给我“开始于”查询逻辑。所以因为% 在那里它没有找到?

我怎样才能做到这一点?

【问题讨论】:

  • 检查重复链接以获得您的答案。您需要使用 LIKE ?? 作为占位符。然后,绑定你想要的任何文本。

标签: oracle prepared-statement startswith


【解决方案1】:

? 字符串文字中的字符是 not 占位符,不能绑定到。相反,您可以让? 独立并使用|| 运算符将% 字符连接到它:

String sql = "select * \n" +
    "from part \n" +
    "where part_number like ? || '%' \n";
// Here --------------------^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2020-03-10
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多