当前位置:首页 > 行业动态 > 正文

安卓创建sqlite数据库

在安卓中创建SQLite数据库需继承SQLiteOpenHelper,实现onCreate()方法定义表结构,onUpgrade()处理版本升级,通过getWritableDatabase()初始化或打开数据库,支持增删改查

SQLiteDatabase类简介

Android提供了android.database.sqlite.SQLiteDatabase类用于操作SQLite数据库,该类封装了SQLite的核心功能,支持增删改查等操作。

创建数据库步骤

  1. 获取数据库实例
    通过SQLiteOpenHelperContext.openOrCreateDatabase()获取数据库对象,推荐使用SQLiteOpenHelper管理数据库版本。

    安卓创建sqlite数据库  第1张

  2. 定义表结构
    使用SQL语句创建表,指定字段类型和约束条件。

  3. 执行CRUD操作
    通过insert()delete()update()query()方法进行数据操作。

核心方法与示例

方法名 功能描述 示例代码
insert() 插入数据 db.insert("users", null, contentValues);
delete() 删除数据 db.delete("users", "id=?", new String[]{String.valueOf(userId)});
update() 更新数据 db.update("users", contentValues, "id=?", new String[]{id});
query() 查询数据 Cursor cursor = db.query("users", null, "age>?", new String[]{"30"});
execSQL() 执行SQL语句 db.execSQL("CREATE TABLE users(id INTEGER PRIMARY KEY)");

完整示例代码

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "app.db";
    private static final int VERSION = 1;
    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建用户表
        db.execSQL("CREATE TABLE users(" +
                   "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                   "name TEXT NOT NULL," +
                   "age INTEGER)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级时删除旧表(实际场景需迁移数据)
        db.execSQL("DROP TABLE IF EXISTS users");
        onCreate(db);
    }
}

数据操作示例

// 插入数据
ContentValues values = new ContentValues();
values.put("name", "张三");
values.put("age", 25);
long rowId = db.insert("users", null, values);
// 查询数据
Cursor cursor = db.query("users", null, "age>?", new String[]{"20"}, null, null, "age DESC");
while(cursor.moveToNext()){
    int id = cursor.getInt(cursor.getColumnIndex("id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    // 处理数据...
}
cursor.close();

数据库升级处理

onUpgrade()方法中:

  1. 比较oldVersionnewVersion
  2. 根据版本差异执行不同的升级逻辑(如添加新表/字段)
  3. 调用db.setVersion(VERSION)更新版本号

最佳实践

  1. 使用SQLiteOpenHelper:自动管理数据库创建和版本控制
  2. 参数化查询:防止SQL注入攻击
  3. 事务处理:批量操作时使用beginTransaction()提高效率
  4. 及时关闭资源:操作完成后关闭SQLiteDatabaseCursor

问题与解答

Q1:如何防止SQL注入攻击?
A1:使用参数化查询代替字符串拼接。

String sql = "SELECT  FROM users WHERE name=?";
SQLiteStatement stmt = db.compileStatement(sql);
stmt.bindString(1, userName); // 自动转义特殊字符

Q2:数据库版本升级时如何保留历史数据?
A2:在onUpgrade()中根据版本号逐步迁移数据。

if (oldVersion < 2) {
    // 版本1升级到2:添加新字段
    db.execSQL("ALTER TABLE users ADD COLUMN email TEXT");
}
if (oldVersion < 3) {
    // 版本2升级到3:创建新表
    db.execSQL("CREATE TABLE logs(...)");
}
0