2017-10-08 39 views
-1

我可以在SQlite數據庫中插入行,但是當我嘗試從SQlite檢索行時,我的應用程序停止工作。這裏是代碼從Sqlite讀取行時應用程序停止

String model; 
    public String getDataFromDB(){ 
     SQLiteDatabase db = dbHelper.getReadableDatabase(); 

     Cursor cursor = db.query(Announcement.TABLE, new String[] {Announcement.KEY_Announcement} 
       , Announcement.KEY_Announcement, 
       null, null, null, null, null); 

     if (cursor.moveToFirst()){ 

       model = cursor.getString(cursor.getColumnIndex(Announcement.KEY_Announcement)); 

     } 

     return model; 
    } 

有人可以告訴哪裏是實際問題?

編輯:我從android監視器複製的文本, 因此,最後我發現了異常,這是它。

00-09 03:52:12.610 335-335/com.example.anum.lmslite E/AndroidRuntime: FATAL EXCEPTION: main 
                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.anum.lmslite/com.example.anum.lmslite.Announcement_Activities.CS101_Announcement}: android.database.sqlite.SQLiteException: no such table: Announcement (code 1): , while compiling: SELECT * FROM Announcement 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395) 
                      at android.app.ActivityThread.access$600(ActivityThread.java:162) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
                      at android.os.Handler.dispatchMessage(Handler.java:107) 
                      at android.os.Looper.loop(Looper.java:194) 
                      at android.app.ActivityThread.main(ActivityThread.java:5392) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:525) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:838) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
                      at dalvik.system.NativeStart.main(Native Method) 
                     Caused by: android.database.sqlite.SQLiteException: no such table: Announcement (code 1): , while compiling: SELECT * FROM Announcement 
                      at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
                      at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:886) 
                      at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:497) 
                      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:1314) 
                      at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253) 
                      at com.example.anum.lmslite.StudentRepo.getDataFromDB(StudentRepo.java:91) 
                      at com.example.anum.lmslite.Announcement_Activities.CS101_Announcement.onCreate(CS101_Announcement.java:46) 
                      at android.app.Activity.performCreate(Activity.java:5122) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1084) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)  
                      at android.app.ActivityThread.access$600(ActivityThread.java:162)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)  
                      at android.os.Handler.dispatchMessage(Handler.java:107)  
                      at android.os.Looper.loop(Looper.java:194)  
                      at android.app.ActivityThread.main(ActivityThread.java:5392)  
                      at java.lang.reflect.Method.invokeNative(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:525)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:838)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)  
                      at dalvik.system.NativeStart.main(Native Method) 
+0

您需要提供您收到的錯誤。檢查堆棧跟蹤的Android Studio監視器。 – Juan

+0

應用程序崩潰後,您應該看到一個異常和堆棧跟蹤。請只發布該部分。 – Juan

+0

例外情況是說該表不存在。這可能是因爲你沒有真正創建它,或者是因爲它拼寫錯誤。 – Juan

回答

0

錯誤說沒有這樣的表:公告,這意味着你沒有創建 與姓名通報任何表

嘗試在創建表聲明您數據庫類就像這樣。

@Override 
public void onCreate(SQLiteDatabase db) { 
    // Your code goes here to create a table Announcement 
    db.execSQL("CREATE TABLE IF NOT EXISTS Announcement (" 
     + "_id INTEGER PRIMARY KEY AUTOINCREMENT " 
     + " COLUMN_ONE TEXT, " 
     + " COLUMN_TWO TEXT)" 
    ); 
} 
-1

我想你在查詢中的第三個參數是錯誤的。 檢查這個document

+0

所以我試過這個遊標cursor = db.query(Announcement.TABLE,new String [] {Announcement.KEY_Announcement} ,Announcement.KEY_Announcement +「=?」, new String [] {},null,null,null,空值);但仍然出現錯誤,我發佈了異常消息 –

+0

如果使用? (佔位符),那麼第四個參數需要是替換佔位符的值。在你的情況下有效的KEY_Announcement。這兩個(第三和第四個參數)基本上導致WHERE子句,即WHERE KEY_Announcment = yourkeyannouncementvalue。當你通過null。 **但是**,日誌表明表格通知不是數據庫中的表格。必須查看'DBhelper'的代碼以及實例dbHelper的設置。也許嘗試添加dbHelper = new dbHelper(this);緊接在行'SQLiteDatabase db = dbHelper.getReadableDatabase();'行之前。 – MikeT