遵守ACID数据库事务四要素:
1、原子性。
事务的原子性是指事务是一个不可分割的工作单位,这组操作要么全部发生,否则全部不发生。
2、一致性。
在事务开始以前,被操作的数据的完整性处于一致性的状态,事务结束后,被操作的数据的完整性也必须处于一致性状态。
3、隔离性。
事务隔离性要求系统必须保证事务不受其他并发执行的事务的影响。
4、持久性。
一个事务一旦成功提交,它对数据库的改变必须是永久的,即便是数据库发生故障也应该不回对其产生任何影响。
一、基于Context上下文对象来获取数据库对象。
二、直接创建数据库对象SQLiteDatabase。
三、基于SQLiteOpenHelper数据库操作帮助类来获取数据库对象。
其实三种方式最终目的都是拿到数据库的操作对象SQLiteDatabase来实现数据的增删改查操作,而且三种方式最终都是调用SQLiteDatabase.openDatabase方法来获取数据库对象。
第一种:
//数据库名
private static final String DATA_BASE_NAME = "test.db";
//表名
private static final String TABLE_NAME = "person";
//列名
private static final String TABLE_COLUMN = "name";
//展示的分隔符
private static final String ITEM_SPLIT = "、";
private void getDB() {
SQLiteDatabase mDataBase = openOrCreateDatabase(DATA_BASE_NAME, MODE_PRIVATE, null);
}
第二种:
SQLiteDatabase mDatabase = SQLiteDatabase.openDatabase(DATA_BASE_NAME, null, MODE_PRIVATE);
SQLiteOpenHelper sqLiteOpenHelper = new SQLiteOpenHelper(context, name, null, 1) {
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
};
SQLiteDatabase mDataBase= sqLiteOpenHelper.getWritableDatabase();
通过上面三种方式获取到数据库对象以后,通过调用SQLiteDatabase提供的insert、delete、update、query等方法就能操作数据库了。而且提供了执行数据库操作语句的方法execSQL来操作数据库。
一、通过execSQL来操作数据库:
private void sqlOperation(String args) {
//增加一条数据
mDataBase.execSQL("INSERT INTO "+ TABLE_NAME +" VALUES (NULL, ?)", new Object[]{args});
//删除一条数据
mDataBase.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + TABLE_COLUMN + "='" + args + "'");
//更新数据
mDataBase.execSQL("UPDATE " + TABLE_NAME + " set " + TABLE_COLUMN + " ='" + args + "'"
+ " WHERE " + TABLE_COLUMN + " ='" + args + "'");
//查询数据
Cursor cursor = mDataBase.rawQuery("SELECT * FROM " + TABLE_NAME, new String[]{});
int index = 0;
while (cursor.moveToNext()){
index += 1;
HashMap map = new HashMap<>();
map.put(TABLE_COLUMN, index + ITEM_SPLIT + cursor.getString(cursor.getColumnIndex(TABLE_COLUMN)));
mListItem.add(map);
}
cursor.close();
}
private void sqlOpration(String args){
//增加一条数据
ContentValues contentValues = new ContentValues();
contentValues.put(TABLE_COLUMN, args);
mDataBase.insert(TABLE_NAME, null, contentValues);
//删除一条数据
mDataBase.delete(TABLE_NAME, TABLE_COLUMN + " == ?", new String[]{args});
//更新数据
mDataBase.update(TABLE_NAME, contentValues, TABLE_COLUMN + " == ?", new String[]{});
}
SQLiteOpenHelper帮助类提供了一些简单高效的方式来帮助我们操作数据库,上面提到了通过继承这个帮助类来获取数据库对象,同时也提供了一些回调方法比如onCreat(数据库第一次被创建的时候)、onUpgrade(数据库升级的时候)、onDowngrade(数据库降级)、onOpen(数据库已经被打开)、onConfigure(数据库的配置信息,比如用来确定数据库的配置信息是否正确之类的)来监听数据库的一些状态。