上一篇
安卓创建数据库sqlite
- 行业动态
- 2025-04-24
- 2271
在Android中创建SQLite数据库通常使用SQLiteOpenHelper类,继承并重写其onCreate、onUpgrade方法,在onCreate中执行SQL语句创建表结构,最后调用getWritableDatabase获取
SQLite数据库简介
SQLite是Android内置的轻量级数据库,支持本地存储结构化数据,适用于需要持久化存储的应用,如用户信息、配置数据等。
创建数据库步骤
继承SQLiteOpenHelper类
通过继承SQLiteOpenHelper
实现数据库创建和版本管理。定义数据库参数
设置数据库名称、版本号、表结构。实现onCreate()方法
在首次创建数据库时执行,用于创建表结构。实现onUpgrade()方法
当数据库版本升级时调用,用于修改表结构。
代码实现示例
// 1. 创建DBHelper类 public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydatabase.db"; // 数据库名称 private static final int DATABASE_VERSION = 1; // 版本号 // 表结构SQL语句 private static final String CREATE_TABLE = "CREATE TABLE users (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT NOT NULL," + "age INTEGER);"; public MyDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } // 2. 重写onCreate()方法 @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE); // 创建表 } // 3. 重写onUpgrade()方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS users"); // 删除旧表 onCreate(db); // 重新创建表 } }
数据库基本操作
操作类型 | 方法说明 | 代码示例 |
---|---|---|
插入数据 | insert() | java DB.insert("users", null, contentValues); |
查询数据 | query() | java Cursor cursor = DB.query("users", columns, selection, args, null, null, null); |
更新数据 | update() | java DB.update("users", contentValues, "id=?", new String[]{String.valueOf(userId)}); |
删除数据 | delete() | java DB.delete("users", "age > ?", new String[]{"30"}); |
使用数据库
// 1. 实例化DBHelper MyDatabaseHelper dbHelper = new MyDatabaseHelper(context); // 2. 获取可写数据库 SQLiteDatabase db = dbHelper.getWritableDatabase(); // 3. 插入数据示例 ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("age", 25); db.insert("users", null, values); // 4. 查询数据示例 Cursor cursor = db.query("users", null, null, null, 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")); Log.d("DB_RESULT", "ID:" + id + " Name:" + name + " Age:" + age); } cursor.close();
注意事项
- 数据库升级
修改DATABASE_VERSION
后,onUpgrade()
会自动触发,需手动处理数据迁移。 - 线程安全
同一数据库对象不建议跨线程使用,可通过getReadableDatabase()
和getWritableDatabase()
获取独立实例。 - 资源释放
使用完Cursor
或SQLiteDatabase
后需调用close()
释放资源。
相关问题与解答
问题1:如何实现数据库版本升级时的数据迁移?
解答:
在onUpgrade()
方法中,根据新旧版本差异执行迁移逻辑。
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 2) { // 新增字段或表结构 db.execSQL("ALTER TABLE users ADD COLUMN email TEXT"); } // 其他版本升级逻辑... }
问题2:多个线程操作数据库会导致什么问题?
解答:
多线程直接操作同一SQLiteDatabase
实例可能引发数据不一致或崩溃,解决方案:
- 为每个线程获取独立数据库实例(
getWritableDatabase()
)。 - 使用事务(
beginTransaction()
)保证原子性。 - 复杂场景可结合
ContentProvider
统一管理数据库