我正在尝试使用 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);
}
}
答案 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
放在反引号中将转义绑定占位符,而是使其成为文字 ?
。这可以解释您没有参数的抱怨。