2017-04-04 67 views
-2

我一直在線上關注一個教程,在我的Android Studio應用程序項目中實現數據庫。但是我已經使用了相同的代碼,但不斷收到每次下同錯誤運行模擬器並嘗試更新我的紀錄之一:偏偏該項目已停止運行嘗試更新我的SQLite數據庫時出現Android Studio錯誤

我已經檢查了我的logcat,畫面顯示如下:

開始崩潰04-04 20:25:23.290 4019-4019/com.example.mark.messaround2 E/AndroidRuntime:致命 例外:主 工藝:com.example.mark.messaround2, PID:4019 android.database.sqlite.SQLiteException:沒有這樣的列:ID(代碼1): ,同時編譯:UPDATE DAY_TABLE SET NAME =?,ID =?,MARKS =?,SURNAME =? WHERE ID =? 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(母語 方法) 在 android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection的.java:500) 在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 在android.database.sqlite.SQLiteProgram(SQLiteProgram.java:58) 在 android.database.sqlite。 SQLiteStatement。(SQLiteStatement.java:31) 在 android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1577) 在 android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1525) 在 com.example.mark.AutismApplicationSuite.DatabaseHelper。 updateData(DatabaseHelper.java:75) at com.example.mark.AutismApplicationSuite.ChooseDayScreen $ 9.onClick(ChooseDayScreen.java:152) at android.view.View.performClick(View.java:5610) at android。 View.View $ PerformClick.run(View.java:22265) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(本機方法) 在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865) 在com.android.internal.os.ZygoteInit.main( ZygoteInit.java:755)

+0

請從您的SQLiteOpenHelper類發佈代碼 – Jahnold

+0

不會讓我發佈它......不理解您必須執行的縮進....因爲我縮進了它四個空間但不會讓我發佈 –

+0

@MarkWilliamson https:// meta.stackexchange.com/help/formatting –

回答

0

檢查這兩個,它們中的任何一個都可以爲你工作。

  1. 在「DAY_TABLE」中,您沒有爲「ID」設置任何屬性。因此,創建一個名爲 「ID」的屬性並更新DB的版本
  2. 更改「DAY_TABLE」後,您沒有更新數據庫的版本。
-1

,既沒有源代碼,也沒有完整的堆棧跟蹤......而最有可能的,沒有作爲輔助類中的第二個參數,準備執行SQL語句時傳遞一個匹配String []。請驗證一次,如果它沒有幫助 - 只需在編輯器中(而不是在瀏覽器中)重新縮進代碼併發布它,特別是執行該查詢的函數...還要查看您的查詢,因此可以查看ID字段被傳遞兩次...更新SQLite的普通作品一樣:

/* set up ContentValues */ 
ContentValues values = new ContentValues(); 
values.put(KEY_USER_FIRSTNAME, firstname); 
values.put(KEY_USER_SURNAME, surname); 
values.put(KEY_USER_MARKS,  marks); 

/* run SQL Transaction */ 
try { 
    db.beginTransaction(); 
    db.update(TABLE_USERS, values, KEY_USER_ID + " = ?", new String[] {String.valueOf(userId)}); 
    db.setTransactionSuccessful(); 
} catch (Exception e) { 
    Log.w(LOG_TAG, e.getMessage(), e); 
} finally { 
    Log.d(LOG_TAG, "userId " + String.valueOf(userId) + " has been updated."); 
    db.endTransaction(); 
} 

錯誤信息甚至明確指出:

沒有這樣的列:ID

,而這是相當罕見的列名都是upperc ase(僅代表這些字符串的常量,如KEY_USER_ID可能具有user_id的字符串值)...另請參閱docs,_id可能是「ID」列的默認描述符。

+0

感謝您的投票正確答案 - 無法說明原因。 pfff。 –

相關問題