java - 使用java注入(inject)sql查询时,出现错误

标签 java mysql

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).

完全不知道为什么它不起作用。非常感谢任何帮助。

最佳答案

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

SELECT * FROM messages WHERE text LIKE ?

你应该使用

ps.setString(1, "%" + word + "%");

关于java - 使用java注入(inject)sql查询时,出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019838/

相关文章:

java - Arrays.sort() 会增加时间复杂度和空间时间复杂度吗?

java - Java 中的 Dijkstra 算法和源码变更

java - 插入 sql 时将 comboBox 值替换为数字

php - 无法使用 php session 重定向到另一个页面

mysql - 如何使用 MYSQL 将同名的所有行连接到一个表中?

php - 我的网站插入和更新脚本已停止工作

java - 无法使用 GCM 发送推送通知

java - 超时命令在批处理文件中不起作用

java - 从字符串中删除 "empty"字符

php - 使用 codeigniter 将变量传递给 SELECT 子句