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