在 Android 中使用 SQLiteDatabase.query() 方法時,若選取欄位包含 MAX() 等聚合函數,容易導致崩潰。因為 query() 的第二個參數預期為欄位名稱陣列,而非完整 SQL 片段。
Cursor cursor = db.query(
TABLE_NAME,
new String[] {"MAX(" + COLUMN_NAME + ") AS GC"}, // 錯誤:這不是單純欄位名
null, null, null, null, null);
String sql = "SELECT MAX(" + COLUMN_NAME + ") AS GC FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(sql, null);
若條件為動態值,建議使用 selectionArgs:
String sql = "SELECT MAX(?) AS GC FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(sql, new String[] { columnName });
query() 適合簡單的欄位選取與條件過濾。rawQuery() 或 execSQL()。