当我尝试获取数据库 android sqlite 中的所有对象时出错
Error when I try get all object in database android sqlite
当值为 "completed" 时,我尝试获取数据库中的所有对象,但出现异常。我认为我的查询是正确的,因为我在另一种方法中使用相同的查询来仅恢复对象。
public List<DownloadProfile> getAllDownloadProfile(String state) {
List<DownloadProfile> downloadProfiles = new ArrayList<>();
Cursor cursor = db.rawQuery("SELECT * FROM " + DownloadEntry.TABLE_NAME
+ " WHERE " + DownloadEntry.COLUMN_NAME_DL_STATE + " = " + state + "", null);
if (cursor.getCount() > 0) {
cursor.moveToFirst();
do {
DownloadProfile downloadProfile = new DownloadProfile(-1, "", "", "");
downloadProfile.path = cursor.getString(cursor.getColumnIndex(DownloadEntry.COLUMN_NAME_DL_PATH));
downloadProfile.extension = cursor.getString(cursor.getColumnIndex(DownloadEntry.COLUMN_NAME_DL_EXTENSION));
downloadProfile.downloadId = cursor.getInt(cursor.getColumnIndex(DownloadEntry.COLUMN_NAME_DL_ID));
downloadProfiles.add(downloadProfile);
} while (cursor.moveToNext());
}
cursor.close();
return downloadProfiles;
}
我的例外:
Caused By : SQL(query) error or missing database.
(no such column: completed (code 1): , while compiling: SELECT * FROM download WHERE download_state = completed)
#################################################################
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1454)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1393)
at com.samsung.sidia.rio360.database.DownloadDatabase.getAllDownloadProfile(DownloadDatabase.java:47)
at com.samsung.sidia.rio360.model.DownloadModel.getVideoIDsAtState(DownloadModel.java:82)
at sidia.rio360app.MainActivity.resumeDl(MainActivity.java:54)
SQL 中的字符串文字进入 'single quotes'
。未加引号的字符串被解释为标识符,例如列名。
但是,最好使用 ?
变量并绑定值:
Cursor cursor = db.rawQuery("SELECT * FROM " + DownloadEntry.TABLE_NAME
+ " WHERE " + DownloadEntry.COLUMN_NAME_DL_STATE + " = ?", new String[] { state });
当值为 "completed" 时,我尝试获取数据库中的所有对象,但出现异常。我认为我的查询是正确的,因为我在另一种方法中使用相同的查询来仅恢复对象。
public List<DownloadProfile> getAllDownloadProfile(String state) {
List<DownloadProfile> downloadProfiles = new ArrayList<>();
Cursor cursor = db.rawQuery("SELECT * FROM " + DownloadEntry.TABLE_NAME
+ " WHERE " + DownloadEntry.COLUMN_NAME_DL_STATE + " = " + state + "", null);
if (cursor.getCount() > 0) {
cursor.moveToFirst();
do {
DownloadProfile downloadProfile = new DownloadProfile(-1, "", "", "");
downloadProfile.path = cursor.getString(cursor.getColumnIndex(DownloadEntry.COLUMN_NAME_DL_PATH));
downloadProfile.extension = cursor.getString(cursor.getColumnIndex(DownloadEntry.COLUMN_NAME_DL_EXTENSION));
downloadProfile.downloadId = cursor.getInt(cursor.getColumnIndex(DownloadEntry.COLUMN_NAME_DL_ID));
downloadProfiles.add(downloadProfile);
} while (cursor.moveToNext());
}
cursor.close();
return downloadProfiles;
}
我的例外:
Caused By : SQL(query) error or missing database.
(no such column: completed (code 1): , while compiling: SELECT * FROM download WHERE download_state = completed)
#################################################################
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1454)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1393)
at com.samsung.sidia.rio360.database.DownloadDatabase.getAllDownloadProfile(DownloadDatabase.java:47)
at com.samsung.sidia.rio360.model.DownloadModel.getVideoIDsAtState(DownloadModel.java:82)
at sidia.rio360app.MainActivity.resumeDl(MainActivity.java:54)
SQL 中的字符串文字进入 'single quotes'
。未加引号的字符串被解释为标识符,例如列名。
但是,最好使用 ?
变量并绑定值:
Cursor cursor = db.rawQuery("SELECT * FROM " + DownloadEntry.TABLE_NAME
+ " WHERE " + DownloadEntry.COLUMN_NAME_DL_STATE + " = ?", new String[] { state });