因此,我創建了一個搜索函數,用戶可以根據這些字段選擇要輸入的字段和數據庫查詢,忽略未輸入的字段。以下是我正在使用的代碼嘗試實現此目的:帶有可選參數的PreparedStatement SQL
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方法中的單引號。他們將根據準備好的聲明自動設置。 – Jens
嗯,我不覺得愚蠢。這是問題。謝謝你,先生。 –