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

私は専門家ではありませんが、プリペアドステートメントはパラメータなしで認識され、それでも1つ(単語)を挿入すると思います...問題は%記号に起因するのでしょうか?

編集:上記の男に同意します...合法のようです。

于 2012-10-22T21:10:15.410 に答える