手動拼接 SQL 字串,parentAccountId 為 null 時呼叫 toString() 拋出 NullPointerException。
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);
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 |
Integer, Long, Double)。@Nullable 註解自動處理。