Android内置轻量级数据库,适用于本地数据存储,支持SQL语法,无需额外依赖。
核心特点:
public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "app.db"; private static final int VERSION = 1; public MyDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建表结构 db.execSQL("CREATE TABLE users(id INTEGER PRIMARY KEY,name TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 数据迁移逻辑 db.execSQL("DROP TABLE IF EXISTS users"); onCreate(db); } }
操作类型 | 推荐方式 | 适用场景 |
---|---|---|
插入数据 | insert() /execSQL() |
单条记录 |
更新数据 | update() |
条件修改 |
删除数据 | delete() |
条件删除 |
查询数据 | query() |
复杂查询 |
插入数据:
// 方式1:使用ContentValues ContentValues values = new ContentValues(); values.put("name", "张三"); db.insert("users", null, values); // 方式2:纯SQL语句 db.execSQL("INSERT INTO users(name) VALUES(?)", new Object[]{"李四"});
查询数据:
Cursor cursor = db.query( "users", // 表名 new String[]{"id","name"}, // 列名 "id=?", // where条件 new String[]{"1"}, // where参数 null, // groupBy null, // having "id DESC" // orderBy );
更新/删除:
// 更新操作 db.update("users", cv, // ContentValues参数 "id=?", // where条件 new String[]{"2"}); // where参数 // 删除操作 db.delete("users", "id=?", new String[]{"3"});
版本号 | 升级操作 | 注意事项 |
---|---|---|
1→2 | 添加新表 | 保持旧表结构 |
2→3 | 修改字段类型 | 数据兼容处理 |
3→4 | 删除冗余表 | 数据备份转移 |
升级示例:
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 2) { db.execSQL("ALTER TABLE users ADD COLUMN age INTEGER"); // 添加新列 } if (oldVersion < 3) { db.execSQL("CREATE TABLE logs(id INTEGER PRIMARY KEY,message TEXT)"); // 新增表 } }
主线程禁止数据库操作,需使用:
AsyncTask
(已过时,但仍可用)Thread+Handler
ExecutorService
LiveData
(Jetpack组件)示例:
new Thread(() -> { SQLiteDatabase db = helper.getWritableDatabase(); db.insert("users", null, values); handler.sendEmptyMessage(MSG_DB_SUCCESS); // 通知UI线程 }).start();
beginTransaction()
和setTransactionSuccessful()
之间SQLiteStatement
比execSQL()
快30%LIMIT
+OFFSET
实现大数据分页close()
释放资源VACUUM
命令压缩数据库文件Q1:如何将查询结果映射为自定义对象?
A:使用SimpleCursorTreeAdapter
或手动遍历Cursor:
List<User> users = new ArrayList<>(); while(cursor.moveToNext()) { User user = new User(); user.setId(cursor.getInt(0)); user.setName(cursor.getString(1)); users.add(user); }
Q2:数据库文件存储在哪个路径?
A:默认路径为:
/data/data/<包名>/databases/<数据库名>.db
可通过Context.getDatabasePath()
获取File对象,调试时可用adb shell