0
public ArrayList<Message> searchMessages(String word) throws DaoException{
    ArrayList<Message> messages = new ArrayList<>();
            Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    try {
        con = getConnection();

        //String query = "SELECT * FROM messages WHERE text LIKE %?% order by date";
        String query = "SELECT * FROM messages WHERE text LIKE '%?%'";
        ps = con.prepareStatement(query);
        ps.setString(1,word);
        rs = ps.executeQuery();

        while (rs.next()) {
            int messageId = rs.getInt("messageId");
            String text = rs.getString("text");

            String date = rs.getString("date");
            int memberId2 = rs.getInt("memberId");
            Message m = new Message(messageId,text,date,memberId2);
            messages.add(m);

            //Company c = new Company(companyId, symbol, companyName, sharePrice, high, low);
            //companies.add(c);
        }
    } catch (SQLException e) {
        throw new DaoException("searchMessages(): " + e.getMessage());
    } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (con != null) {
                freeConnection(con);
            }
        } catch (SQLException e) {
            throw new DaoException("searchMessages(): " + e.getMessage());
        }
    }

    return messages;

}

只需先解释一下代码。它只是在消息表及其文本字段中搜索提供的任何内容。我使用准备好的语句将其插入查询并运行它。无论我提供什么字符串,它都会出现此错误

oow_package.DaoException: searchMessages(): Parameter index out of range (1 > number of parameters, which is 0).

不知道为什么它一点也不工作。将不胜感激任何帮助。

4

2 回答 2

5

您不能在准备好的语句中使用这样的参数。查询应该是

SELECT * FROM messages WHERE text LIKE ?

你应该使用

ps.setString(1, "%" + word + "%");
于 2012-10-22T21:09:49.280 回答
0

我不是专家,但我会说你准备好的语句没有参数被识别,你仍然插入一个(单词)......也许问题来自 % 符号?

编辑:同意上面的人......似乎是合法的。

于 2012-10-22T21:10:15.410 回答