之前操作sqlite一直用sdk中的SQLiteOpenHelper,在多线程操作数据库(特别是插入数据)的时候,总是提示sqlite已经被锁定,其它线程就无法继续了。
今天研究了一下android用jdbc操作sqlite,再用多线程去操作数据库的时候就不会有这个状况了,
准备工作是下载驱动jar包,http://code.google.com/p/sqldroid/downloads/list
项目demo:http://download.csdn.net/detail/s478853630/8131379
首先建一张表,结构如下:
create table backup (
id integer primary key autoincrement,
url varchar(200),
param varchar(500),
memberId integer,
data text
);
再写一个线程的内部类:
public class Insert extends Thread {
private int index;
public Insert(int index) {
this.index = index;
}
public void run() {
try {
final String path = FileUtil.get().getContextRoot() + "car.db";
Connection conn = DriverManager.getConnection("jdbc:sqldroid:" + path);
String sql = "insert into backup (url, memberId, data) values ('http://www.baidu.com', '" + index + "', 'data" + index + "')";
PreparedStatement statement = conn.prepareStatement(sql);
statement.executeUpdate();
statement.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后启动多线程:
Class.forName("org.sqldroid.SqldroidDriver");
for (int i = 0; i < 20; i++) {
new Insert(i).start();
}
20个线程在android手机里同时运行,也很顺畅,
总算解决了database is locked这个毛病