1. 数据库更新,onUpgrade();
2. 数据库类中
3. 第一次连接数据库是判断是否更新(版本号);
4. 更新内容都在 onUpgrade();中
/**
* 数据库的版本号更新时回调此方法,
* 更新数据库的内容(删除表, 添加表, 修改表)
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion == 1 && newVersion == 2) {
Log.i(TAG, "数据库更新啦");
// 在person表中添加一个余额列balance
db.execSQL("alter table person add balance integer;");
}
}
5. 事务-----------------(try—catch—finally)中
**张三向李四转钱,忽然ATM挂了,张三扣了钱,李四没收到钱**--------------运用事务
public void testTransaction() {
PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());
SQLiteDatabase db = openHelper.getWritableDatabase();
if(db.isOpen()) {
try {
// 开启事务
db.beginTransaction();
// 1. 从张三账户中扣1000块钱
db.execSQL("update person set balance = balance - 1000 where name = 'zhangsan';");
// ATM机, 挂掉了.
// int result = 10 / 0;
// 2. 向李四账户中加1000块钱
db.execSQL("update person set balance = balance + 1000 where name = 'lisi';");
// 标记事务成功
db.setTransactionSuccessful();
} finally {
// 停止事务
db.endTransaction();
}
db.close();
}
}
事务
// 开启事务
db.beginTransaction();
// 标记事务成功
db.setTransactionSuccessful();
// 停止事务
db.endTransaction();
1. 没有读到事务成功,数据会回滚**
2. 事务要么全部被执行,要么就全部不被执行
3. 在操作大量数据时用到事务,可缩短大量时间-----------------优化很多点(例:开关数据库)
public void testTransactionInsert() {
PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());
SQLiteDatabase db = openHelper.getWritableDatabase();
if(db.isOpen()) {
// 1. 记住当前的时间
long start = System.currentTimeMillis();
// 2. 开始添加数据
try {
db.beginTransaction();
for (int i = 0; i < 10000; i++) {
db.execSQL("insert into person(name, age, balance) values('wang" + i + "', " + (10 + i) + ", " + (10000 + i) + ")");
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
// 3. 记住结束时间, 计算耗时时间
long end = System.currentTimeMillis();
long diff = end - start;
Log.i(TAG, "耗时: " + diff + "毫秒");
db.close();
}
}