Database :
if (DatabaseUtils.queryNumEntries(foodDBHlpr.getWritableDatabase(),FoodDatabaseHelper.TABLE_NAME ) < 1) {
foodDBHlpr.insertFood("John", "Mashed potato");
foodDBHlpr.insertFood("Johnson", "Pineapple pie");
}
SQL query
public Cursor getFoodsWithProvidedFood(String provided_food) {
return this.getWritableDatabase().query(
TABLE_NAME,
null,
COL_2 + " LIKE '%" +provided_food.replace("'", "''") + "%' ",
null,
null,
null,
null
);
Search
mCsr = foodDBHlpr.getFoodsWithProvidedFood(alfabetsearch);
while (mCsr.moveToNext()) {
PreferredFood=mCsr.getString(mCsr.getColumnIndex(FoodDatabaseHelper.COL_3));
}
When I use "Like " query everything is working fine, however when I look for John, it shows both results for John as Johnson as they are similar. But when I search John it must only show the result for John ( not Johnson).
So far I tried :
1. COL_2 + "="+"" +provided_food.replace("'", "''")+",
1. COL_2 + "=" +provided_food.replace("'", "''") + " ",
But it is not working LogCat :
E/SQLiteLog: (1) no such column: John in "SELECT * FROM dataset WHERE Food=John"
--------- beginning of crash
2022-03-27 18:44:09.867 7571-7639/com.example.humanuz E/AndroidRuntime: FATAL EXCEPTION: Thread-3
Process: com.example.humanuz, PID: 7571
android.database.sqlite.SQLiteException: no such column: John (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM dataset WHERE Food=John
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1045)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:652)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1545)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1392)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1263)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1431)
at com.example.humanuz.FoodDatabaseHelper.getFoodsWithProvidedFood(FoodDatabaseHelper.java:60)
at com.example.humanuz.MainActivity.Search(MainActivity.java:3805)
Please give me a hint.
This is becuase of how SQL process your Query. In your when clause, SQL is referring John
as a table column instead of String. As a result, SQL is trying to find John
as a table column and failing. This can be fixed by simply adding quotes around the value in your codebase as follow:
COL_2 + "'" +provided_food.replace("'", "''") + "'"
or
COL_2 + "\"" +provided_food.replace("'", "''") + "\""
The Like
query only worked because you were placing the '
(single quote) around the value. Similarly, once you put some quote (single or double) around the value, it would work.