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

SQLite 查詢最大值失敗:正確使用 rawQuery 替代 query 方法

     編輯:程式設計綜合問答

在 Android 中使用 SQLiteDatabase.query() 方法時,若選取欄位包含 MAX() 等聚合函數,容易導致崩潰。因為 query() 的第二個參數預期為欄位名稱陣列,而非完整 SQL 片段。

錯誤寫法

Cursor cursor = db.query(
    TABLE_NAME,
    new String[] {"MAX(" + COLUMN_NAME + ") AS GC"}, // 錯誤:這不是單純欄位名
    null, null, null, null, null);

正確寫法:使用 rawQuery

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() 適合簡單的欄位選取與條件過濾。
  • 涉及聚合函數、子查詢或複雜 SQL 時,改用 rawQuery() 或 execSQL()。
  • 務必使用參數綁定避免 SQL 注入風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved