参数索引超出范围(1 > 参数数量,即 0)错误

时间:2021-01-29 06:22:12

标签: java sql

我正在尝试使用 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);   
    } 
}                                              

1 个答案:

答案 0 :(得分:0)

我建议将通配符表达式作为字符串绑定到准备好的语句中的独立 /^(0+\.?|0*\.\d+|0*1(\.0*)?)$/ 占位符:

?

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

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

相关问题