Получение этого исключения: «android.database.sqlite.Исключение SQLiteException: нет такого столбца: _id: при компиляции», когда у меня есть столбец _id

#java #android #sqlite

#java #Android #sqlite

Вопрос:

Я продолжаю получать это исключение всякий раз, когда запускаю свое приложение. Не уверен, что является причиной этого. Вот некоторая справочная информация по этому:

  • У меня есть это в моих глобальных атрибутах:

     public static final String KEY_ID = "_id";
      
  • И после этого у меня есть строковая переменная для настройки столбцов моей базы данных:

     private static final String DATABASE_CREATE =
                "create table sdCards (_id integer primary key autoincrement, "
                  "arg0 text not null, "
                  "arg1 integer not null, "
                          "arg2 integer not null, "
                          "arg3 integer not null, "
                          "arg4 integer not null, "
                          "arg5 integer not null);";
      
  • Наконец, я создаю базу данных как таковую:

     public void onCreate(SQLiteDatabase db) {
         db.execSQL(DATABASE_CREATE);
    }
      

Не совсем уверен, что происходит. У меня явно есть столбец _id! Любая помощь была бы высоко оценена!

РЕДАКТИРОВАТЬ: Вот мой logcat

 E/AndroidRuntime(24036): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydomain.packagename/com.mydomain.packagename.MainClass}: android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, arg0, arg1, arg2, arg3, arg4, arg5 FROM table_name
E/AndroidRuntime(24036):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1741)
E/AndroidRuntime(24036):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1757)
E/AndroidRuntime(24036):    at android.app.ActivityThread.access$1500(ActivityThread.java:123)
E/AndroidRuntime(24036):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:998)
E/AndroidRuntime(24036):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(24036):    at android.os.Looper.loop(Looper.java:126)
E/AndroidRuntime(24036):    at android.app.ActivityThread.main(ActivityThread.java:4002)
E/AndroidRuntime(24036):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(24036):    at java.lang.reflect.Method.invoke(Method.java:491)
E/AndroidRuntime(24036):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
E/AndroidRuntime(24036):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
E/AndroidRuntime(24036):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(24036): Caused by: android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, sdName, writes, modifications, moved, deletes FROM sdCards
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:147)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:368)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:131)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:95)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1534)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1414)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1370)
E/AndroidRuntime(24036):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1450)
E/AndroidRuntime(24036):    at com.mydomain.packagename.DbAdapter.fetchAllSd(DbAdapter.java:131)
E/AndroidRuntime(24036):    at com.mydomain.packagename.MainClass.fillData(SDBenchmark.java:70)
E/AndroidRuntime(24036):    at com.mydomain.packagename.MainClass.onCreate(SDBenchmark.java:28)
E/AndroidRuntime(24036):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
E/AndroidRuntime(24036):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1705)
E/AndroidRuntime(24036):    ... 11 more
  

Комментарии:

1. Пожалуйста, покажите код, в котором вы получаете это исключение, и вставьте вывод LogCat.

2. Нам нужно было бы увидеть код для fetchAllSd() и, возможно, fillData()

Ответ №1:

Попробуйте удалить свою базу данных (возможно, путем удаления вашего приложения), а затем попробуйте запустить приложение. Это воссоздаст вашу базу данных. Одна из возможностей заключается в том, что у вас уже создана таблица, и где-то происходит сбой выбора, потому что столбец _id никогда не был создан.