我想使用預準備語句來防止SQL SQLite數據庫上的SQL注入。然而,當查詢包含Like
並且與Where name = ?
一起使用時,rawquery會崩潰嗎?有沒有辦法在Android SQLite數據庫中使用like和prepared語句?Android SQLite select * from表名%like key%使用預處理語句
這是查詢:
它給出了一個綁定或列索引超出範圍 謝謝。
我想使用預準備語句來防止SQL SQLite數據庫上的SQL注入。然而,當查詢包含Like
並且與Where name = ?
一起使用時,rawquery會崩潰嗎?有沒有辦法在Android SQLite數據庫中使用like和prepared語句?Android SQLite select * from表名%like key%使用預處理語句
這是查詢:
它給出了一個綁定或列索引超出範圍 謝謝。
if (name.length() != 0) {
name = "%" + name + "%";
}
if (email.length() != 0) {
email = "%" + email + "%";
}
if (Phone.length() != 0) {
Phone = "%" + Phone + "%";
}
String selectQuery = " select * from tbl_Customer where Customer_Name like '"
+ name
+ "' or Customer_Email like '"
+ email
+ "' or Customer_Phone like '"
+ Phone
+ "' ORDER BY Customer_Id DESC";
Cursor cursor = mDb.rawQuery(selectQuery, null);`
謝謝,訣竅是通過檢查空字符串。拯救了我的一天。在普通查詢中,空字符串不會導致問題,但是具有準備好的語句,IT部門。 – 2013-05-08 07:29:04
嘗試像..
String[] a = new String[5];
a[0] = '%' + criterion + '%';
a[1] = '%' + criterion + '%';
a[2] = '%' + criterion + '%';
a[3] = '%' + criterion + '%';
a[4] = '%' + criterion + '%';
Cursor cursor = database.rawQuery(sqlQuery,a);
我已經嘗試過,仍然是同樣的問題。 android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException:綁定或列索引超出範圍:句柄0x1001a58 – 2013-05-07 10:54:07
嘗試
Cursor cursor = database.rawQuery(sqlQuery, new String[]{"'%" + criterion + "%'",
"'%" + criterion + "%'",
"'%" + criterion + "%'",
"'%" + criterion + "%'",
"'%" + criterion + "%'"});
你缺少了 「'」 前後。
您可以檢查這在SQL查詢中使用的「Like」 http://stackoverflow.com/questions/5752575/cant-use-like-clause-in-android-app – 2013-05-07 10:38:54
像將與rawquery工作,能你發佈你的代碼和日誌,以便我們可以看到你得到什麼錯誤... – Vamshi 2013-05-07 10:41:26