前言
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) { 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.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架构解析