2012-11-28 31 views
1

當我在我的數據庫Microsoft Access查詢,使用此代碼..在選擇語句結果的where子句中使用LIKE和OR來表示「參數太少」。預期1.'

dc.rs = dc.st.executeQuery("select count(*) from Accounts where username like '%"+searchTF.getText()+"%' OR firstname like '%"+searchTF.getText()+"%'"); 

我得到了這樣的結果,不知道這是錯誤的,因爲它是寫在黑色文本。

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. 

我想通過用戶名或姓名,這就是爲什麼我把一個或者沒有進行搜索。

有誰知道我在哪裏遇到了一些問題?

+1

'searchTF.setText(「; DELETE * FROM Accounts;」);' – Perception

+4

您的代碼容易受到[SQL注入攻擊](https://en.wikipedia.org/wiki/SQL_injection)!你應該從不**從這樣的用戶輸入構建SQL語句。改爲使用帶有參數的準備好的語句! –

+2

@Perception:'「'; DELETE * FROM Accounts; - 」'可能更好「。 –

回答

2

Microsoft Access使用*爲通配符

MS Access還根據該頁面

http://refactoringself.com/2011/06/22/ms-access-error-too-few-parameters-expected-x/

用事先準備好的聲明

String queryString = "select count(*) from Accounts where username like ? OR firstname like ?"; 
PreparedStatement stmt= con.prepareStatement(queryString); 
stmt.setString(1, "*" + searchTF.getText() + "*"); 
stmt.setString(2, "*" + searchTF.getText() + "*"); 
stmt.executeQuery(); 

或不太安全的方式使用單引號

dc.rs = dc.st.executeQuery("select count(*) from Accounts where username like " + 
    "\'*" + searchTF.getText() + "\'* OR firstname like \'*" + searchTF.getText() + "*\'"); 
+0

您還需要在準備好的語句中將星號添加到字符串中。此外,這可能是一個好主意,指出*好*方法**第一** ;-) –

+0

*沒有工作......我試着準備好的聲明。它說「參數太少,預計3」。 – Katherine

+1

@Katherine你有沒有仔細檢查表名和列名是否正確? – jbl