我正在尝试查询相同的数据。 但是,即使索引从1开始,prepareStatement也会抛出一个关于错误索引的SQLException。
这是功能:
public List<Paper1> search(String keyword) throws NotConnectedException {
List<Paper1> papers = new ArrayList<>();
try {
PreparedStatement searchKeyword =
connection.prepareStatement("SELECT title, registered FROM paper "
+ "WHERE title LIKE '%?%'");
searchKeyword.setString(1, keyword);
ResultSet rs = searchKeyword.executeQuery();
while (rs.next()) {
Paper1 p = new Paper1();
p.setTitle(rs.getString("title"));
p.setRegistered(rs.getDate("registered").toLocalDate());
papers.add(p);
}
return papers;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
SQLException说,错误的行是
searchKeyword.setString(1, keyword);
因为列索引错误
答案 0 :(得分:2)
您的问号占位符位于单引号内,因此它被视为字面字符 - 而不是占位符。解析语句时,'%?%'
只是一个字符串而没有看到绑定变量,因此不能设置绑定变量 - 没有变量,因此没有索引为1的变量。
您可以使用连接来解决此问题:
PreparedStatement searchKeyword =
connection.prepareStatement("SELECT title, registered FROM paper "
+ "WHERE title LIKE '%' || ? || '%'");
答案 1 :(得分:0)
在执行之前打印出查询字符串:
SELECT title, registered FROM paperWHERE title LIKE '%?%'
答案应该是显而易见的。
您需要空格来分隔关键字。