#android #android-sqlite
#Android #android-sqlite
Вопрос:
Я пытаюсь извлечь данные из таблицы базы данных с именем item_table
. У меня есть имя столбца as, Category
которое содержит значение с именем Pasta
. Я пытаюсь извлечь данные, используя Where
предложение, но я получаю сообщение об ошибке no such column as Pasta
. Пожалуйста, направляйте меня шаг за шагом. Мои коды и журналы ошибок выглядят следующим образом:
журнал ошибок
E/AndroidRuntime(4070): FATAL EXCEPTION: main
E/AndroidRuntime(4070): Process: com.alrimal, PID: 4070
E/AndroidRuntime(4070): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.alrimal/com.alrimal.MenuItemsActivity}: android.database.sqlite.SQLiteException: no such column: Pasta (code 1): , while compiling: SELECT * FROM item_table WHERE Category=Pasta
E/AndroidRuntime(4070): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
E/AndroidRuntime(4070): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
E/AndroidRuntime(4070): at android.app.ActivityThread.access$700(ActivityThread.java:135)
E/AndroidRuntime(4070): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
E/AndroidRuntime(4070): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(4070): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(4070): at android.app.ActivityThread.main(ActivityThread.java:4998)
E/AndroidRuntime(4070): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(4070): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(4070): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
E/AndroidRuntime(4070): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
E/AndroidRuntime(4070): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(4070): Caused by: android.database.sqlite.SQLiteException: no such column: Pasta (code 1): , while compiling: SELECT * FROM item_table WHERE Category=Pasta
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
E/AndroidRuntime(4070): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
E/AndroidRuntime(4070): at com.helper.DbHelper.retrieve_item_details(DbHelper.java:158)
E/AndroidRuntime(4070): at com.alrimal.MenuItemsActivity.onCreate(MenuItemsActivity.java:57)
E/AndroidRuntime(4070): at android.app.Activity.performCreate(Activity.java:5243)
E/AndroidRuntime(4070): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
E/AndroidRuntime(4070): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
E/AndroidRuntime(4070): ... 11 more
мой код Dbhelper
public ArrayList<HashMap<String, String>> retrieve_item_details(String category) {
ArrayList<HashMap<String, String>> wordList;
wordList = new ArrayList<HashMap<String, String>>();
//String selectQuery = "SELECT * FROM item_table";
String selectQuery = "SELECT * FROM item_table WHERE Category=" category;
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
HashMap<String, String> map = new HashMap<String, String>();
map.put("rowid", cursor.getString(0));
map.put("id", cursor.getString(1));
map.put("Item_Id", cursor.getString(2));
map.put("Item_Name", cursor.getString(3));
map.put("Price", cursor.getString(4));
map.put("Currency", cursor.getString(5));
map.put("Desc", cursor.getString(6));
wordList.add(map);
} while (cursor.moveToNext());
}cursor.close();
database.close();
return wordList;
}
Моя деятельность, при которой я вызываю базу данных, заключается в следующем:
items=db.retrieve_item_details(getcategory);
Комментарии:
1. Покажите свою инструкцию create для
item_table
таблицы
Ответ №1:
Я думаю, что в таблице отсутствует название столбца ‘Category’, пожалуйста, перепроверьте его.
Комментарии:
1. Я просмотрел это в sqlite manager .. там есть столбец с именем category
2. хорошо, тогда пользовательский запрос должен быть в такой форме «SELECT * FROM item_table WHERE Category='» категория «‘»;
Ответ №2:
Запустите приложение на виртуальном устройстве, затем перейдите в DDMS perspective, оттуда data / данные / ваше приложение / база данных / yourdatabasename затем извлеките базу данных на своем компьютере и откройте ее с помощью mozilla.(Примечание: Чтобы открыть базу данных sqlite в Mozilla, вам необходимо добавить дополнение Sqlite manager.) Теперь вы можете проверить свою базу данных.Это поможет вам легко решить вашу проблему.
Ответ №3:
Pasta
в 'single quotes'
должен быть строковый литерал, который не должен приниматься в качестве имени столбца.
Однако лучше использовать параметры в запросе. Замените литералы на ?
в SQL и передайте значения в аргументах bind функции запроса:
String selectQuery = "SELECT * FROM item_table WHERE Category=?";
Cursor cursor = database.rawQuery(selectQuery, new String[] { category });