本文实例讲述了Android使用Sqlite存储数据的方法。分享给大家供大家参考,具体如下:
一般在开发程序中,经常使用数据的存储功能,如在使用Delphi开发程序时,存储程序的简单设置的INI文件,在C#开发中有时也需要存储简单的设置,个人一般存储在XML中,也在INI中存储过,但是不如XML使用方便,那么这些都是简单的数据存储功能,在Android中也支持这样的文件存储,但是现在这里主要说的还是使用SQLite存储数据,SQLite是一种跨平台的数据库,是单文件式的,如咱们平常见的最多的Access数据库,但是他有比Access更好的平台支持,并且支持分页,现在主要是用于嵌入式的开发。
在
在Android应用开发中,SQLite是一个重要的本地数据存储解决方案。SQLite是一个轻量级的、关系型的数据库管理系统,它被设计为嵌入式使用,尤其适合移动设备。与其它数据库不同,SQLite是单文件形式,这使得它易于在不同的平台上部署和共享。
在Android中,SQLite数据库通常通过SQLiteOpenHelper类来管理和操作。SQLiteOpenHelper是一个抽象类,它提供了创建、升级和打开数据库的基本方法。开发者需要继承SQLiteOpenHelper并重写其中的关键方法,以便根据应用的需求定制数据库的生命周期。
以下是使用SQLiteOpenHelper的一些关键知识点:
1. **构造函数**:
`public DBHelper(Context context, String name, CursorFactory factory, int version)` 是SQLiteOpenHelper的默认构造函数,接受上下文(Context)、数据库名称、游标工厂(CursorFactory,通常是null)和数据库版本号作为参数。
2. **onCreate()**:
这个方法会在数据库首次创建时被调用,开发者在这里编写创建表的SQL语句,例如:
```java
@Override
public void onCreate(SQLiteDatabase db) {
String createTableSql = "CREATE TABLE IF NOT EXISTS " + tableName + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, column1 TEXT, column2 INTEGER)";
db.execSQL(createTableSql);
}
```
这里`_id`通常作为主键,`AUTOINCREMENT`确保每次插入新行时主键自增。
3. **onUpgrade()**:
当数据库版本号增加时,此方法会被调用,用于升级旧版本的数据库到新版本。例如,添加新的表或修改现有表的结构。
```java
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < newVersion) {
// 升级逻辑
}
}
```
4. **openOrCreateDatabase()**:
直接使用`openOrCreateDatabase()`可以创建或打开数据库,但通常推荐使用SQLiteOpenHelper,因为它提供了自动管理数据库版本和状态的能力。
5. **getWritableDatabase() 和 getReadableDatabase()**:
这两个方法分别用于获取可读写和只读的数据库对象。在实际操作数据库之前,必须先调用这两个方法之一来打开数据库连接。
6. **execSQL() 和 rawQuery()**:
`execSQL(String sql)` 用于执行非查询的SQL语句,如插入、更新、删除等操作。
`rawQuery(String sql, String[] selectionArgs)` 用于执行查询语句,返回一个Cursor对象,可以通过Cursor遍历查询结果。
7. **自定义SQLiteOpenHelper**:
如上述示例所示,可以根据需求扩展SQLiteOpenHelper,添加更多的方法来简化数据库操作,如插入数据、更新数据、删除数据等。
8. **使用示例**:
调用SQLiteOpenHelper的实例来执行SQL操作:
```java
DBHelper dbHelper = new DBHelper(context, dbName);
SQLiteDatabase db = dbHelper.getWritableDatabase();
dbHelper.InsertintoDB(db, "INSERT INTO " + tableName + " (column1, column2) VALUES (?, ?)");
Cursor cursor = dbHelper.opendb(db, "SELECT * FROM " + tableName);
// 处理cursor
```
9. **数据持久化**:
使用SQLite存储的数据在应用生命周期内是持久化的,即使应用关闭或设备重启,数据依然保留,这为应用提供了可靠的数据存储能力。
通过以上知识点,开发者可以有效地在Android应用中利用SQLite数据库进行数据存储和管理。注意,虽然SQLite适用于简单的数据存储,但对复杂查询或大量并发操作可能效率较低,对于这些情况,可能需要考虑使用服务器端的数据库或云存储服务。