I am new to app development andam trying to build an app that searches a database table called "All" but keep getting this error:
E/SQLiteLog: (1) near "All": syntax error
Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (near "All": syntax error (code 1): , while compiling: SELECT Phrase FROM All)
I think it must be a problem with my database setup but can't find the fault.
Here is my code:
public class Database extends SQLiteAssetHelper {
private static final String DB_NAME="DoYouGetMeDoc.db";
private static final int DB_VER=1;
public Database(Context context) {
super(context, DB_NAME, null, DB_VER);
}
public List<Items> getall(){
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqliteSelect={"Phrase","Description","Example", "Chapter"};
String tableName="All";
qb.setTables(tableName);
Cursor cursor = qb.query(db,sqliteSelect,null,null,null,null,null);
List<Items> results = new ArrayList<>();
if (cursor.moveToFirst()){
do {
Items items = new Items();
items.setPhrase(cursor.getString(cursor.getColumnIndex("Phrase")));
items.setDescription(cursor.getString(cursor.getColumnIndex("Description")));
items.setExample(cursor.getString(cursor.getColumnIndex("Example")));
items.setChapter(cursor.getString(cursor.getColumnIndex("Chapter")));
results.add(items);
}while (cursor.moveToNext());
}
return results;
}
public List<String> getPhrases(){
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqliteSelect={"Phrase"};
String tableName="All";
qb.setTables(tableName);
Cursor cursor = qb.query(db,sqliteSelect,null,null,null,null,null);
List<String> results = new ArrayList<>();
if (cursor.moveToFirst()){
do {
results.add(cursor.getString(cursor.getColumnIndex("Phrase")));
}while (cursor.moveToNext());
}
return results;
}
public List<Items> getPhrasesbyPhrase(String phrase)
{
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqliteSelect={"Phrase","Description","Example","Chapter"};
String tableName="All";
qb.setTables(tableName);
Cursor cursor = qb.query(db,sqliteSelect,"Phrase like ?",new String[]{"%"+phrase+"%"},null,null,null);
List<Items> results = new ArrayList<>();
if (cursor.moveToFirst()){
do {
Items items = new Items();
items.setPhrase(cursor.getString(cursor.getColumnIndex("Phrase")));
items.setDescription(cursor.getString(cursor.getColumnIndex("Description")));
items.setExample(cursor.getString(cursor.getColumnIndex("Example")));
items.setChapter(cursor.getString(cursor.getColumnIndex("Chapter")));
results.add(items);
}while (cursor.moveToNext());
}
return results;
} }
in short, my app should allow the user to search the database using a search bar I set up in my MainActivity.xml but every time I try and open the app it keeps crashing.
I am completely stumped and would be really grateful for some advice.
Update: I changed the table name from "All" too "FullBook" and am now getting this error:
E/SQLiteLog: (1) no such table: FullBook
ALL
is a keyword (reserved word) for SQLite and all (I believe) rdms's
and you can't use it as the name of a table.
Here you can see all the reserved words of SQLite:
https://www.sqlite.org/lang_keywords.html
If you insist to use it, you can enclose it in square brackets like [All]
.