首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android SQLite 開發常見錯誤:資料表未建立導致操作失敗

     編輯:程式設計疑難解答

錯誤現象

DAO 執行 insert/update/query 時拋出 no such table 或游標為空。

根因排查

  1. 檢查 DBHelper extends SQLiteOpenHelper 的 onCreate(SQLiteDatabase db) 是否包含 db.execSQL(CREATE_TABLE_SQL)。
  2. 確認建表 SQL 語法正確(欄位類型、主鍵、約束)。
  3. 若修改過建表邏輯,必須 **增加資料庫版本號** private static final int DATABASE_VERSION = 2; 觸發 onUpgrade,或卸載 App 重裝。
  4. 檢查 getWritableDatabase() 是否在主執行緒長時間持有,導致 ANR。

程式碼檢查清單

// DBHelper.java
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE add (_id INTEGER PRIMARY KEY, time TEXT, sport_type TEXT, ...)");
    db.execSQL("CREATE TABLE ActionList (_id INTEGER PRIMARY KEY, type INTEGER, name TEXT, ...)");
}

// DAO 建構子
public AddDAO(Context c) {
    db = new DBHelper(c).getWritableDatabase(); // 此處會觸發 onCreate/onUpgrade
}

最佳實踐

  • 使用單例模式管理 SQLiteOpenHelper 實例,避免重複開啟連接。
  • 建表 SQL 統一放在 DBConstants 或 Schema 類中,便於維護。
  • 釋放游標:cursor.close() 或使用 try-with-resources (API 19+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved