Android開發-數據庫SQLite

在Android應用開發中,當需要存儲結構化數據時,SQLite是一個非常強大的工具。SQLite是一款輕量級的關系型數據庫管理系統,它內嵌于Android系統中,支持SQL語法,并且不需要單獨的服務器進程或系統配置。本文將介紹如何在Android應用中使用SQLite進行數據的存儲、查詢、更新和刪除。

一、SQLite簡介

SQLite是無服務器、零配置、事務性的SQL數據庫引擎。它非常適合移動設備上的應用,因為它占用資源少,性能高效,并且可以直接與應用程序代碼集成。Android提供了一個名為SQLiteOpenHelper的幫助類,用于管理數據庫的創建和版本管理。

二、準備工作

首先,在你的項目中添加對SQLite的支持。實際上,由于SQLite是Android的一部分,所以無需額外添加依賴項。

三、創建數據庫

(一)繼承SQLiteOpenHelper

要使用SQLite數據庫,你需要創建一個類繼承自SQLiteOpenHelper,并重寫以下方法:

  • onCreate(SQLiteDatabase db):首次創建數據庫時調用。
  • onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):當數據庫版本升級時調用。
public class MyDatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "example.db";private static final int DATABASE_VERSION = 1;public MyDatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {// 創建表db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 當數據庫版本更新時執行的操作db.execSQL("DROP TABLE IF EXISTS users");onCreate(db);}
}

四、基本操作

(一)插入數據

MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "Alice");
values.put("age", 25);
long newRowId = db.insert("users", null, values);
db.close();

(二)查詢數據

SQLiteDatabase db = dbHelper.getReadableDatabase();
String[] projection = {"id", "name", "age"};
Cursor cursor = db.query("users", projection, null, null, null, null, null);while (cursor.moveToNext()) {long id = cursor.getLong(cursor.getColumnIndexOrThrow("id"));String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));int age = cursor.getInt(cursor.getColumnIndexOrThrow("age"));Log.d("User", "ID: " + id + ", Name: " + name + ", Age: " + age);
}
cursor.close();
db.close();

(三)更新數據

SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("age", 26);
String selection = "name LIKE ?";
String[] selectionArgs = { "Alice" };
int count = db.update("users", values, selection, selectionArgs);
db.close();

(四)刪除數據

SQLiteDatabase db = dbHelper.getWritableDatabase();
String selection = "age > ?";
String[] selectionArgs = { "30" };
int deletedRows = db.delete("users", selection, selectionArgs);
db.close();

五、優化與注意事項

(一)事務處理

對于批量插入等操作,可以使用事務來提高效率:

db.beginTransaction();
try {// 插入多條記錄db.setTransactionSuccessful();
} finally {db.endTransaction();
}

(二)關閉數據庫連接

確保每次完成數據庫操作后都關閉SQLiteDatabase對象以釋放資源。

(三)異常處理

在進行數據庫操作時,務必做好異常處理,以防程序崩潰。

六、結語

感謝您的閱讀!如果你有任何疑問或想要分享的經驗,請在評論區留言交流!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79865.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android實現USB通訊

在 Android 上枚舉 USB 設備除了使用 UsbManager.getDeviceList() 方法外,還有以下幾種常見的方式: 1. 使用 USB 設備過濾器(XML 配置) 通過在 AndroidManifest.xml 中配置 USB 設備過濾器,可以讓系統自動檢測并通知…

FFmpeg視頻編碼的完整操作指南

步驟如下: 安裝和準備FFmpeg:確保包含所需編碼器(如libx264)。基本命令行編碼:使用ffmpeg命令進行轉碼,設置視頻編碼器、CRF、預設等。API編碼流程(針對開發者): a. 注冊…

鴻蒙 UIAbility組件與UI的數據同步和窗口關閉

使用 EventHub 進行數據通信 Stage模型概念圖 根據 Stage 模型概念圖 UIAbility 先于 ArkUI Page 創建 所以,事件要先 .on 訂閱 再 emit 發布 假如現在有頁面 Page1 和他的 UIAbility // src/main/ets/page1ability/Page1Ability.ets onCreate(want: Want, laun…

全棧工程師實戰手冊:LuatOS日志系統開發指南!

本文聚焦LuatOS-log庫的實戰應用場景,通過完整案例演示日志模塊集成、格式定制及遠程同步方案,幫助全棧開發者構建靈活可靠的日志管理框架。下面,我們一起來認識LuatOS的log庫! 一、 log.info() log info()主要打印一些正常的…

STM32-USART串口通信(9)

一、通信接口介紹 通信的目的:將一個設備的數據傳送到另一個設備,擴展硬件系統。 當STM32想要實現一些功能,但是需要外掛一些其他模塊才能實現,這就需要在兩個設備之間連接上一根或多跟通信線,通過通信線路發送或者接…

【MoveIt 2】使用 MoveIt 任務構造器(MoveIt Task Constructor)進行拾取和放置

本教程將引導您創建一個使用 MoveIt 任務構造器規劃抓取和放置操作的包。MoveIt 任務構造器(https://github.com/moveit/moveit_task_constructor/tree/ros2/)提供了一種為包含多個不同子任務(稱為階段)的任務進行規劃的方法。如果…

破解商業綜合體清潔管理困局:商業空間AI智能保潔管理系統全場景解決方案

方案整體概述 隨著商業綜合體日益向智能化、精細化管理轉型,傳統保潔工作面臨人員監管難、清潔效果評估難、應急響應滯后等諸多挑戰。為解決這些痛點,本系統依托計算機視覺、行為識別、圖像分割與深度學習等AI技術,構建一套集人員管理、工作…

spring響應式編程系列:異步消費數據

目錄 示例 大致流程 parallel cache PARALLEL_SUPPLIER newParallel init publishOn new MonoSubscribeOnValue ???????subscribe ???????new LambdaMonoSubscriber ???????MonoSubscribeOnValue.subscribe ???????onSubscribe ??…

視頻編解碼學習十二之Android疑點

一、android.view.SurfaceControl.setDisplaySurface的作用 android.view.SurfaceControl.setDisplaySurface 是 Android 系統中一個 native 層級別的 API,主要用于 設置某個物理顯示屏(Display)的輸出 Surface,屬于 SurfaceFlin…

家用或辦公 Windows 電腦玩人工智能開源項目配備核顯的必要性(含 NPU 及顯卡類型補充)

一、GPU 與顯卡的概念澄清 首先需要明確一個容易誤解的概念:GPU 不等同于顯卡。 顯卡和GPU是兩個不同的概念。 【概念區分】 在討論圖形計算領域時,需首先澄清一個常見誤區:GPU(圖形處理單元)與顯卡(視…

Python----神經網絡(《Deep Residual Learning for Image Recognition》論文和ResNet網絡結構)

一、論文 1.1、論文基本信息 標題:Deep Residual Learning for Image Recognition 作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 單位:Microsoft Research 會議:CVPR 2016 主要貢獻:提出了一種深度殘…

Qt/C++開發監控GB28181系統/錄像文件查詢/錄像回放/倍速播放/錄像文件下載

一、前言 搞定了實時預覽后,另一個功能就是錄像回放,錄像回放和視頻點播功能完全一致,唯一的區別就是發送點播的sdp信息中攜帶了開始時間和結束時間,因為是錄像文件,所以有這個時間,而實時視頻預覽這個對應…

在Spark搭建YARN

(一)什么是SparkONYarn模式 Spark on YARN(Yet Another Resource Negotiator)是 Spark 框架在 Hadoop 集群中運行的一種部署模式,它借助 Hadoop YARN 來管理資源和調度任務。 架構組成 ResourceManager:作…

SpringAI

機器學習: 定義:人工智能的子領域,通過數據驅動的方法讓計算機學習規律,進行預測或決策。 核心方法: 監督學習(如線性回歸、SVM)。 無監督學習(如聚類、降維)。 強化學…

如何用Redis實現分布式鎖?RedLock算法的核心思想?Redisson的看門狗機制原理?

一、Redis分布式鎖基礎實現 public class RedisDistributedLock {private JedisPool jedisPool;private String lockKey;private String clientId;private int expireTime 30; // 默認30秒public boolean tryLock() {try (Jedis jedis jedisPool.getResource()) {// NX表示不…

前端面試寶典---js垃圾回收機制

什么是垃圾回收 垃圾回收是指一種自動內存管理機制,當聲明一個變量時,會在內存中開辟一塊內存空間用于存放這個變量。當這個變量被使用過后,可能再也不需要它了,此時垃圾回收器會自動檢測并回收這些不再使用的內存空間。垃圾回收…

阿里媽媽LMA2新進展:集成大語言模型與電商知識的通用召回大模型URM

近日,阿里媽媽在國際頂級學術會議 —— 國際萬維網大會(International World Wide Web Conference, 簡稱WWW)上共同主持了計算廣告算法技術相關的Tutorial(講座),介紹了計算廣告領域的技術發展脈絡&#xf…

數字孿生實時監控汽車零部件工廠智能化巡檢新范式

在汽車制造業面臨數字化轉型時,汽車零部件工廠也面臨著提升生產效率、降低運營成本和增強市場競爭力的多重挑戰。傳統的巡檢方式已經難以滿足現代工廠對高效、精準管理和實時決策的需求。數字孿生系統的出現,為汽車零部件工廠提供了一種創新的智能化巡檢…

【計算機網絡】3數據鏈路層②

1. 數據鏈路層所處的地位 數據鏈路層使用的信道主要有兩種: ①點對點信道:PPP協議 ②廣播信道:有線局域網,CSMA/CD協議;無線局域網,CSMA/CA協議 對比項點對點信道 vs 單播廣播信道 vs 廣播核心是否一致? 一致(一對一傳輸)? 一致(一對所有傳輸)差異點前者是物理層…

c++中的函數(默認參數,占位參數,重載)

1&#xff0c;函數默認參數 在c中&#xff0c;函數的形參列表中的形參是可以有默認值得 語法&#xff1a;返回值類型 函數名 &#xff08;參數 默認值&#xff09;{} 示例&#xff1a; #include<iostream> using namespace std;//函數默認參數 // 就是如果傳了就…