нет такой таблицы: QuestionDB.db - PullRequest
0 голосов
/ 29 марта 2019

Когда я запускаю приложение, происходит сбой, говоря, что такой таблицы нет: QuestionDB.db, но когда я проверяю данные, база данных создается, и все равно говорится, что такой таблицы нет, любая помощь будет принята!

Я попытался изменить версию на тот случай, если таблица еще существует. Мне также пришлось изменить QuestionDBHandler с `` `

public QuestionDBHandler(@androidx.annotation.Nullable Context context, @androidx.annotation.Nullable String name, @androidx.annotation.Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }```

to
```
public QuestionDBHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
```

потому что в моей MainActivity QuestinDBHandler не принимает контекст.

Мой DBHandler

public QuestionDBHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
public void onCreate(SQLiteDatabase db) {
        String CREATE_TABLE = " CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID +
                COLUMN_NAME + COLUMN_ANSWER + ")";
        db.execSQL(CREATE_TABLE);
    }

Это моя основная деятельность

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quiz_recycler);
        QuestionDBHandler mQuestion = new QuestionDBHandler(this);
        questionsList = mQuestion.getAllQuestions();

getAllQuestions ()

public List<Questions> getAllQuestions(){
        List<Questions> questionsList = new ArrayList<>();
        db = getReadableDatabase();
        Cursor c = db.rawQuery("Select * FROM " + DATABASE_NAME, null);

Это ошибка

2019-03-29 01:19:19.196 24878-24878/edu.gsu.csci5338.geoquizelite E/SQLiteLog: (1) no such table: QuestionDB.db
2019-03-29 01:19:19.196 24878-24878/edu.gsu.csci5338.geoquizelite D/AndroidRuntime: Shutting down VM
2019-03-29 01:19:19.197 24878-24878/edu.gsu.csci5338.geoquizelite E/AndroidRuntime: FATAL EXCEPTION: main
    Process: edu.gsu.csci5338.geoquizelite, PID: 24878
    java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.gsu.csci5338.geoquizelite/edu.gsu.csci5338.geoquizelite.MainActivity}: android.database.sqlite.SQLiteException: no such table: QuestionDB.db (code 1): , while compiling: Select * FROM QuestionDB.db
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
     Caused by: android.database.sqlite.SQLiteException: no such table: QuestionDB.db (code 1): , while compiling: Select * FROM QuestionDB.db
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        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:1318)
        at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
        at edu.gsu.csci5338.geoquizelite.QuestionDBHandler.getAllQuestions(QuestionDBHandler.java:82)
        at edu.gsu.csci5338.geoquizelite.MainActivity.onCreate(MainActivity.java:28)
        at android.app.Activity.performCreate(Activity.java:6662)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 

Спасибо всем за помощь! Оказывается, я использовал DATABASE_NAME вместо своего TABLE_NAME.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Это ваш код, если getAllQuestions ()

public List<Questions> getAllQuestions(){
  List<Questions> questionsList = new ArrayList<>();
  db = getReadableDatabase();
  Cursor c = db.rawQuery("Select * FROM " + DATABASE_NAME, null);
  ...

выбор должен быть сделан для TABLE_NAME, а не DATABASE_NAME, поэтому должно быть

  Cursor c = db.rawQuery("Select * FROM " + TABLE_NAME, null);
0 голосов
/ 29 марта 2019

Вместо этого

public void onCreate(SQLiteDatabase db) {
        String CREATE_TABLE = " CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID +
                COLUMN_NAME + COLUMN_ANSWER + ")";
        db.execSQL(CREATE_TABLE);
    }

Попробуй вот так

 public void onCreate(SQLiteDatabase db) {
 String CREATE_TABLE = " CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " integer primary key," + COLUMN_NAME +" text," + COLUMN_ANSWER +" text"+ ")";
    db.execSQL(CREATE_TABLE);
    }
...