【发布时间】: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