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

Android SQLite 儲存 NULL 值:使用 ContentValues 避免空指標異常

     編輯:程式設計綜合問答

問題

手動拼接 SQL 字串,parentAccountId 為 null 時呼叫 toString() 拋出 NullPointerException。

解決:ContentValues 自動處理 null

ContentValues values = new ContentValues();
values.put("userId", account.userId);
values.put("accountId", account.accountId);
values.put("accountType", account.accountType.getValue());
values.put("accountName", account.accountName);
// 若 parentAccountId 為 null,put 會儲存 SQL NULL,不會拋出例外
values.put("parentAccountId", account.parentAccountId); // Integer 或 int? 需用 Integer 物件

long rowId = db.insert("MAAccounts", null, values);

補充:查詢時讀取 NULL

Cursor c = db.query("MAAccounts", null, null, null, null, null, null);
if (c.moveToFirst()) {
    // 讀取可能為 NULL 的欄位
    int idx = c.getColumnIndex("parentAccountId");
    Integer parentId = c.isNull(idx) ? null : c.getInt(idx);
}

原始碼修正對照

錯誤寫法正確寫法
rawQuery("INSERT ... VALUES(?,?)", new String[]{..., intVal.toString()})ContentValues.put("col", intVal) (intVal 為 Integer 物件,可為 null)
手動拼接字串參數化查詢 / ContentValues

最佳實務

  • **永遠使用 ContentValues** 進行增刪改,避免 SQL 注入與 null 處理錯誤。
  • 資料模型中可為空的數值型別請用包裝類別(Integer, Long, Double)。
  • 使用 Room ORM 可進一步以 @Nullable 註解自動處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved