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对象以释放资源。

(三)异常处理

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

六、结语

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

相关推荐
哲科软件5 分钟前
跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议
android·flutter·kotlin
Hello.Reader1 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
简佐义的博客2 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
爬山算法2 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
老纪的技术唠嗑局4 小时前
OceanBase PoC 经验总结(二)—— AP 业务
数据库
阿里云大数据AI技术5 小时前
OpenSearch 视频 RAG 实践
数据库·人工智能·llm
jyan_敬言6 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio
程序员老刘7 小时前
Android 16开发者全解读
android·flutter·客户端
m0_623955667 小时前
Oracle使用SQL一次性向表中插入多行数据
数据库·sql·oracle
福柯柯7 小时前
Android ContentProvider的使用
android·contenprovider