Sqlite数据库基本使用

Android SQLite 数据库是一个轻量级的关系型数据库,它非常适合在移动设备上存储结构化数据。下面将详细介绍如何在 Android 应用中使用 SQLite 数据库进行数据存储,包括创建数据库、升级数据库、添加、更新、删除、查询数据以及使用事务的 Java 实现。

1. 创建数据库

在 Android 中,SQLite 数据库通常是通过继承 SQLiteOpenHelper 类来创建的。SQLiteOpenHelper 类提供了管理数据库创建和版本管理的方法。

|---|---------------------------------------------------------------------------------------|
| | import android.content.Context; |
| | import android.database.sqlite.SQLiteDatabase; |
| | import android.database.sqlite.SQLiteOpenHelper; |
| | |
| | public class MyDatabaseHelper extends SQLiteOpenHelper { |
| | |
| | private static final String DATABASE_NAME = "my_database.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, name TEXT, age INTEGER)"); |
| | } |
| | |
| | @Override |
| | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { |
| | // 数据库升级时的操作 |
| | } |
| | } |

2. 升级数据库

当需要升级数据库时,可以通过修改 DATABASE_VERSION 的值来触发 onUpgrade 方法。在这个方法中,你可以执行表结构的修改、数据的迁移等操作。

|---|-------------------------------------------------------------------------------|
| | @Override |
| | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { |
| | // 例如,从版本1升级到版本2时,添加一个新列 |
| | if (oldVersion < 2) { |
| | db.execSQL("ALTER TABLE users ADD COLUMN email TEXT"); |
| | } |
| | // 可以继续添加更多版本升级的逻辑 |
| | } |

3. 添加数据

使用 SQLiteDatabaseinsert 方法来添加数据。

|---|--------------------------------------------------------|
| | SQLiteDatabase db = dbHelper.getWritableDatabase(); |
| | ContentValues values = new ContentValues(); |
| | values.put("name", "John Doe"); |
| | values.put("age", 30); |
| | long newRowId = db.insert("users", null, values); |

4. 更新数据

使用 update 方法来更新数据。

|---|-------------------------------------------------------------------|
| | SQLiteDatabase db = dbHelper.getWritableDatabase(); |
| | ContentValues values = new ContentValues(); |
| | values.put("age", 31); // 更新年龄为31 |
| | String whereClause = "id = ?"; // 更新条件为id等于某个值 |
| | String[] whereArgs = {String.valueOf(newRowId)}; // id的值 |
| | int count = db.update("users", values, whereClause, whereArgs); |

5. 删除数据

使用 delete 方法来删除数据。

|---|-------------------------------------------------------------|
| | SQLiteDatabase db = dbHelper.getWritableDatabase(); |
| | String whereClause = "id = ?"; // 删除条件为id等于某个值 |
| | String[] whereArgs = {String.valueOf(newRowId)}; // id的值 |
| | int count = db.delete("users", whereClause, whereArgs); |

6. 查询数据

使用 query 方法来查询数据。

|---|-----------------------------------------------------------------------------------------------|
| | SQLiteDatabase db = dbHelper.getReadableDatabase(); |
| | String[] projection = {"id", "name", "age"}; // 需要查询的列名 |
| | String selection = "age > ?"; // 查询条件,例如年龄大于某个值 |
| | String[] selectionArgs = {"25"}; // 查询条件的值 |
| | Cursor cursor = db.query("users", projection, selection, selectionArgs, null, null, null); |
| | while (cursor.moveToNext()) { |
| | int id = cursor.getInt(cursor.getColumnIndex("id")); |
| | String name = cursor.getString(cursor.getColumnIndex("name")); |
| | int age = cursor.getInt(cursor.getColumnIndex("age")); |
| | // 处理查询结果... |
| | } |
| | cursor.close(); // 记得关闭Cursor |

7. 使用事务

SQLite 支持事务处理,可以确保一系列数据库操作要么全部成功,要么全部失败。

|---|---------------------------------------------------------|
| | SQLiteDatabase db = dbHelper.getWritableDatabase(); |
| | db.beginTransaction(); // 开始事务 |
| | try { |
| | // 执行一系列数据库操作... |
| | db.setTransactionSuccessful(); // 如果所有操作都成功,则标记事务为成功 |
| | } catch (Exception e) { |
| | // 处理异常... |
| | } finally { |
| | db.endTransaction(); // 结束事务,如果标记为成功,则提交事务,否则回滚事务 |
| | } |

相关推荐
数据知道6 小时前
PostgreSQL 核心原理:系统内部的对象寻址机制(OID 对象标识符)
数据库·postgresql
倔强的石头_7 小时前
关系数据库替换用金仓:数据迁移过程中的完整性与一致性风险
数据库
Elastic 中国社区官方博客7 小时前
使用 Groq 与 Elasticsearch 进行智能查询
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
穿过锁扣的风7 小时前
一文搞懂 SQL 五大分类:DQL/DML/DDL/DCL/TCL
数据库·microsoft·oracle
l1t7 小时前
DeepSeek总结的SNKV — 无查询处理器的 SQLite 键值存储
数据库·sqlite·kvstore
洛豳枭薰7 小时前
MySQL 梳理
数据库·mysql
薛定谔的猫喵喵7 小时前
基于C++ Qt的唐代诗歌查询系统设计与实现
c++·qt·sqlite
九.九7 小时前
CANN 算子生态的底层安全与驱动依赖:固件校验与算子安全边界的强化
大数据·数据库·安全
蓝帆傲亦7 小时前
代码革命!我用Claude Code 3个月完成1年工作量,这些实战经验全给你
jvm·数据库·oracle
亓才孓8 小时前
[JDBC]事务
java·开发语言·数据库