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

Android SQLite 數據庫操作封裝:基於 SQLiteDatabase 的通用 CRUD 工具類實現

     編輯:程式設計疑難解答

設計目標

提供一個功能完整、防 SQL 注入、支持事務、分頁查詢的 SQLite 工具類,簡化 Android 數據庫操作。

核心功能

  • 建表:createTable(String sql)
  • 增:insert(String table, Object[] params) 參數化插入
  • 刪:delete(String table, String key, String keyValue)
  • 改:update(String table, String keyParam, String keyField, String[] fields, Object[] params)
  • 查:多種重載
    • select(String table) 全表
    • select(String table, String key, String keyValue) 條件查詢
    • selectVector(String sql) 自定義 SQL 返回 Vector<Vector<Object>>
    • selectWithPager(...) 分頁查詢返回 List<List<Object>>
  • 工具方法:獲取字段名、列數、行數、最大值等。

關鍵實現細節

  1. 參數化防注入:所有增刷改查使用 ? 佔位符,通過 SQLiteStatement.bindXXX() 綁定值。
  2. 連接管理:構造函數接收 Connection,外部控制事務(commit/rollback)。
  3. 結果集轉換:ResultSet.getMetaData() 動態獲取列名與數量,裝填 Vector 或 Object[][]。
  4. 異常處理:捕獲 SQLException,記錄日志,事務自動回滾。

使用示例

SQLiteUtils db = new SQLiteUtils(conn);
// 插入
db.insert("user", new Object[] { "tom", 25, "tom@qq.com" });
// 查詢
Vector> data = db.select("user", "name", "tom");
// 分頁
List> page = db.selectWithPager("user", new String[]{}, new String[]{}, "10", "0", "id");

避坑指南

  • 不要在 UI 線程執行耗時查詢,使用 AsyncTask、RxJava 或协程。
  • 大數據量分頁必須配合 ORDER BY 且有索引,否則 OFFSET 性能差。
  • 生產環境建議升級為 Room 或 GreenDAO 等 ORM 框架。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved