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):当数据库版本升级时调用。
java 复制代码
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);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表
        db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 当数据库版本更新时执行的操作
        db.execSQL("DROP TABLE IF EXISTS users");
        onCreate(db);
    }
}

四、基本操作

(一)插入数据

java 复制代码
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();

(二)查询数据

java 复制代码
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();

(三)更新数据

java 复制代码
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();

(四)删除数据

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

五、优化与注意事项

(一)事务处理

对于批量插入等操作,可以使用事务来提高效率:

java 复制代码
db.beginTransaction();
try {
    // 插入多条记录
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

(二)关闭数据库连接

确保每次完成数据库操作后都关闭SQLiteDatabase对象以释放资源。

(三)异常处理

在进行数据库操作时,务必做好异常处理,以防程序崩溃。

六、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

相关推荐
倔强的石头_7 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
阿巴斯甜13 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker13 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952714 小时前
Andorid Google 登录接入文档
android
黄林晴16 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android