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

Android SQLiteOpenHelper 正確用法:資料庫建立時機與常見崩潰排查

     編輯:程式設計疑難解答

核心誤區:建構子 ≠ 建立資料庫

new DbCreate(context) **只會建立輔助物件**,**不會**觸發 onCreate()。資料庫實際建立發生在**首次呼叫 getReadableDatabase() 或 getWritableDatabase() 時**。

正確初始化流程

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 啟動時預先觸發建立/升級,避免首次查詢卡頓
        new DbCreate(this).getWritableDatabase(); 
    }
}

並在 AndroidManifest.xml 註冊 android:name=".MyApplication"。

常見崩潰原因排查

  1. SQL 語法錯誤:decimal 在 SQLite 中非標準類型,建議用 REAL 或 INTEGER(存分為單位)。
  2. 主鍵定義:_user integer primary key 應為 _id INTEGER PRIMARY KEY AUTOINCREMENT 以符合 Android 慣例。
  3. 執行緒阻塞:UI 執行緒直接做資料庫 I/O 會導致 ANR,請用 Room、AsyncTask 或協程移至背景執行緒。
  4. Context 錯誤:傳入 Activity 而非 Application Context 可能導致記憶體洩漏。

現代替代方案:Room Database

Google 官方推薦 Room:編譯期驗證 SQL、LiveData/Flow 觀察、自動遷移、協程整合,徹底解決上述痛點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved