【笔记】Android数据存储SQLite

前言

Android数据存储SQLite学习笔记

注意事项

  • SQLite支持存储NULL、INTEGER、REAL、TEXT、BLOB数据,但最终都会转换为TEXT字符串类型,所以可以直接将想要存放的任何数据以TEXT类型存储
  • SQLite要求主键为_id(虽然也可以是id,但是不规范),主键只能使用INTEGER类型

数据库文件存放位置

  • /data/data/com.xxx.app/database/xxDB.db

自定义一个类继承SQLiteOpenHelper类

  • 采用单例模式

<name>DB.db:数据库文件名
1:版本号,从1开始。以后升级数据库时,版本号加1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class MySQLiteOpenHelper extends SQLiteOpenHelper {

private static SQLiteOpenHelper sqLiteOpenHelper;

public static synchronized SQLiteOpenHelper getSqLiteOpenHelper(Context context) {
if (sqLiteOpenHelper==null) {
sqLiteOpenHelper = new MySQLiteOpenHelper(context, "<name>DB.db", null, 1);
}
return sqLiteOpenHelper;
}

private MySQLiteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

// 数据库初始化,此方法只会执行一次,一般用来执行创建数据表的语句
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
// 通过SQL语句创建数据表
String sql = "CREATE TABLE users(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)";
sqLiteDatabase.execSQL(sql);
}

// 数据库升级
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}
}

创建数据库文件

  • 初次创建对象,会创建数据库文件,并通过onCreate()方法创建数据表
1
2
3
4
5
SQLiteOpenHelper sqLiteOpenHelper = MySQLiteOpenHelper.getSqLiteOpenHelper(this);

// 数据库文件的创建,需要依靠以下任何一个语句
//sqLiteOpenHelper.getReadableDatabase();
sqLiteOpenHelper.getWritableDatabase();

<select>:SQL语句查询语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SQLiteOpenHelper sqLiteOpenHelper = MySQLiteOpenHelper.getSqLiteOpenHelper(this);
SQLiteDatabase db = sqLiteOpenHelper.getReadableDatabase();

if (db.isOpen()) {
// 返回游标
Cursor cursor = db.rawQuery("<select>", null);

// 迭代游标
while (cursor.moveToNext()) {
// 获取第一个字段的值
cursor.getInt(0);

// 获取指定字段名的值
cursor.getInt(cursor.getColumnIndex("_id"));
}

// 关闭游标
cursor.close();
// 关闭数据库
db.close();
}

<insert>:SQL语句插入语句

1
2
3
4
5
6
7
8
9
SQLiteOpenHelper sqLiteOpenHelper = MySQLiteOpenHelper.getSqLiteOpenHelper(this);
SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();

if (db.isOpen()) {
db.execSQL("<insert>");

// 关闭数据库
db.close();
}

<update>:SQL语句修改语句

1
2
3
4
5
6
7
8
9
SQLiteOpenHelper sqLiteOpenHelper = MySQLiteOpenHelper.getSqLiteOpenHelper(this);
SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();

if (db.isOpen()) {
db.execSQL("<update>");

// 关闭数据库
db.close();
}

<delete>:SQL语句删除语句

1
2
3
4
5
6
7
8
9
SQLiteOpenHelper sqLiteOpenHelper = MySQLiteOpenHelper.getSqLiteOpenHelper(this);
SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();

if (db.isOpen()) {
db.execSQL("<delete>");

// 关闭数据库
db.close();
}

使用占位符动态添加参数

1
db.execSQL("UPDATE 表名 set 字段名=? where _id=?", new Object[]{"字段值", 0});

完成

参考文献

哔哩哔哩——Android架构解析