【发布时间】:2015-08-21 08:26:56
【问题描述】:
所以我正在创建一个搜索功能,用户可以在其中选择要输入的字段,并且将根据这些字段查询数据库,而忽略未输入的字段。这是我用来尝试实现此目的的代码:
PreparedStatement ps = DeviceTracker.getConnection().prepareStatement("use SBK_CAPE_COOKIES SELECT * FROM \"CC_Employees\""
+"WHERE EmployeeID LIKE ? AND FirstName LIKE ? AND Surname LIKE ? AND Email LIKE ? AND Region LIKE ? AND Department LIKE ?"
,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
if (!jTextField6.getText().isEmpty()) ps.setInt(1, Integer.parseInt(jTextField6.getText()));
else ps.setString(1, "'%'");
if (!jTextField5.getText().isEmpty()) ps.setString(2, "'"+jTextField5.getText()+"'");
else ps.setString(2, "'%'");
if (!jTextField4.getText().isEmpty()) ps.setString(3, "'"+jTextField4.getText()+"'");
else ps.setString(3, "'%'");
if (!jTextField3.getText().isEmpty()) ps.setString(4, "'"+jTextField3.getText()+"'");
else ps.setString(4, "'%'");
if(!jComboBox1.getSelectedItem().equals("All")) ps.setString(5, "'"+jComboBox1.getSelectedItem().toString()+"'");
else ps.setString(5, "'%'");
if(!jComboBox2.getSelectedItem().equals("All")) ps.setString(6, "'"+jComboBox2.getSelectedItem().toString()+"'");
else ps.setString(6, "'%'");
ResultSet rs = ps.executeQuery();
ResultSet 'rs' 每次都是空的。我做错了什么?
【问题讨论】:
-
值设置为 '%' 这就是使用 LIKE 的原因。我不会让它们中的任何一个为空。
-
删除 setString 方法中的单引号。它们将由准备好的语句自动设置。
-
好吧,我不觉得自己很愚蠢。这就是问题所在。谢谢好心的先生。
-
第一个参数是一个整数。某些(您的)数据库是否允许您使用
LIKE '%'查询整数列?还是该列实际上是一个 varchar 列?
标签: java sql sql-server-2008 prepared-statement