【问题标题】:Parameter index out of range (1 > number of parameters, which is 0) error参数索引超出范围(1 > 参数个数,即 0)错误
【发布时间】:2021-01-29 06:22:12
【问题描述】:

我正在尝试使用 like 运算符来搜索数据库数据并显示在 jTable 中,但我不断得到

参数索引超出范围(1>参数个数,即 0).

这是我下面的代码。

private void jButton_searchActionPerformed(java.awt.event.ActionEvent evt) {                                               
//button captures data from textbox and displays on table
    
    PreparedStatement ps;
    ResultSet rs;
    
    String Search = jTextField_search.getText();
    try {   
String query = "SELECT * FROM books WHERE Title like ' %`?`%' " ; 
ps = conn.getConnection().prepareStatement(query);
 ps.setString(1, Search);       
   
 rs =  ps.executeQuery();
        
       jTable2.setModel(DbUtils.resultSetToTableModel(rs));
    } 
    catch(Exception e) {
        JOptionPane.showMessageDialog(null, e);   
    } 
}                                              

【问题讨论】:

    标签: java sql


    【解决方案1】:

    我建议将通配符表达式作为字符串绑定到您准备好的语句中的独立 ? 占位符:

    String Search = jTextField_search.getText();
    try {   
        String query = "SELECT * FROM books WHERE Title LIKE ?"; 
        ps = conn.getConnection().prepareStatement(query);
        ps.setString(1, "%" + Search + "%");
        rs = ps.executeQuery();
        jTable2.setModel(DbUtils.resultSetToTableModel(rs));
    } 
    catch(Exception e) {
        JOptionPane.showMessageDialog(null, e);   
    }
    

    我真的不知道您为什么在 LIKE 表达式中使用反引号。 MySQL(可能还有其他一些)数据库使用反引号来转义对象,例如列名和表名。这对您的查询可能没有意义。

    为了解释您当前的错误,在 MySQL 中将 ? 用反引号括起来将转义绑定占位符,而是使其成为文字 ?。这可以解释你没有参数的抱怨。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多