没有这样的表:QuestionDB.db

时间:2019-03-29 05:40:06

标签: java android android-sqlite

当我执行该应用程序时,崩溃了,没有任何此类表: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);
    }

这是我的MainActivity

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 :(得分:0)

代替此

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);
    }

答案 1 :(得分:0)

如果您的代码是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);