我正在尝试查询相同的数据。但是preparedStatement抛出了关于错误索引的SQLException,即使该索引从文档中说的1开始。
这是函数:
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);
由于列索引错误
您的问号占位符位于单引号内,因此被视为文字字符-根本不是占位符。解析该语句时,'%?%'它只是一个字符串,看不到绑定变量,因此无法设置绑定变量-没有变量,因此没有索引为1的变量。
'%?%'
您可以使用串联来解决此问题:
PreparedStatement searchKeyword = connection.prepareStatement("SELECT title, registered FROM paper " + "WHERE title LIKE '%' || ? || '%'");