使用Oracle“;以“开始”;同时使用查询逻辑和java PreparedStatement

使用Oracle“;以“开始”;同时使用查询逻辑和java PreparedStatement,oracle,prepared-statement,startswith,Oracle,Prepared Statement,Startswith,我有一个Oracle查询: select * from part where part_number like 'PDM%' 这将导致每个零件的零件号以“PDM”(读取:)开头 我想用JavaPreparedStatement执行这个查询,这样我就可以用任何文本替换“PDM”。因此,我创建了这个方法: String sql = "select * \n" + "from part \n" + "where part_number like '?%' \n"; try(Prep

我有一个Oracle查询:

select *
from part
where part_number like 'PDM%'
这将导致每个零件的零件号以“PDM”(读取:)开头

我想用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
正在寻找问号
本身。但是我需要
%
出现,以提供“从开始”查询逻辑。因为
%
在那里,所以它找不到


如何实现这一点?

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

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

请检查重复链接以获取您的答案。您需要像使用
一样使用
作为占位符。然后,将任何文本绑定到它。