android mysql同时_Android数据库并发操作

本文探讨了如何提高Android SQLite数据库性能,包括使用SQLiteStatement避免额外检查以提升插入操作速度,利用事务处理大批量增删改操作以减少资源消耗,以及解决并发访问时的'database is locked'异常。通过单例模式实现SQLiteOpenHelper,确保在不同线程中的顺序执行,从而实现安全的并发控制。
摘要由CSDN通过智能技术生成

2ff34e647e2e3cdfd8dca593e17d9b0a.png

1.Android SQLite函数调用

首先在SQLiteDatabase中有已经封装好的增删改查操作函数,操作简单数据自己在封装一个dao直接调用即可,操作复杂可以自定义SQL语句,但是里面都是通过SQLiteStatement来执行其对应操作。查询操作执行和其他不同,是通过SQLiteCursorDriver来找到curser的。查询(读):外层包装->SQL语句->SQLiteCursorDriver

增删改(写):外层包装->SQL语句->SQLiteStatement

所以可以直接如网上所说,用来SQLiteStatement写,将SQLiteDatabase database = new SQLiteDatabase();

if (database.isOpen())

{

database.beginTransaction();

try {

//sql为insert into tableName (name) values ("test")

database.execSQL(sql);

}

database.setTransactionSuccessful();

} finally {

database.endTransaction();

}

database.close();

}

改为SQLiteDatabase database = new SQLiteDatabase();

//sql为insert into tableName (name) values (?)

SQLiteStatement sqlListStatment = database.compileStatement(sql);

if (database.isOpen())

{

database.beginTransaction();

try {

//index 为1开始索引,value为入库的值

//bingXXX为插入XXX类型

sqLiteStatement.bindString(index, value);

sqLiteStatement.executeInsert();

}

database.setTransactionSuccessful();

} finally {

database.endTransaction();

}

database.close();

}

这样性能应该会提升不少,因为SQLiteDatabase封装的时候做了一些检查操作,每一条省下的时间可能微不足道,但如果数据过万就不同了。

2.事务操作

Android SQL语句默认一条语句是一个事务,事务是为了保证操作的安全性,但是事务实际执行却会耗费大量资源,如果反复执行一个插入操作10000次将会相当耗时,所以在反复执行增删改操所时,一定在外层加入事务,让整个任务作为一条事务来执行。db.beginTransaction();

try{

//批量写操作

}catch(Exception e){

e.printStackTrace();

}finally{

db.endTransaction();

}

3.SQLite database is locked

这个是由于同时操作数据库抛出的异常,数据库同一时间不能被并发访问,这一点用单例模式可以解决,SQLiteOpenHelper在多个线程创建多个对象不能同时读和写,只能同时读,但是用单例模式,单个SQLiteOpenHelper对象在不同线程可以同时读写。

关于SQLiteOpenHelper用单例在不同线程同时执行读写,写写操作,我做了一些测试,发现数据库的访问是顺序执行的,两个线程同时进行写操作,先执行的会先操作,另一个线程就阻塞了,等到先执行的操作完成,另一个线程才开始操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值