sqlite4java是sqlite驱动的一个开源项目,效率和稳定性非常的不错,关键是它在各个平台下均有本地实现,跨平台做的很不错,使用也非常的简单,又能提供x86平台和arm平台的支持,windows、linux、安卓全面支持,该项目官方网站:https://code.google.com/p/sqlite4java/
最新版本:
sqlite4java-282withsqlite 3.7.10and Android support
但是关于其中多线程下确保安全的队列:
sqliteQueue官方网站的介绍非常的少,下面就举例说明它的用法:
测试主程序:
public class Mainapp {
/**
* @param args
* @throws sqliteException
* @throws InterruptedException
* @throws IOException
*/
public static void main(String[] args) throws sqliteException,IOException,InterruptedException {
sqliteQueue myQueue=new sqliteQueue(new File(file_db));
myQueue.start();
//主线程一定要建立唯一的sqliteQueue,这个队列已经打开好数据库,在myQueue.start();
//后,就在其他任何线程可以往队列里加入数据库操作(sqliteJob),当然主线程也是可以的。
sql_thread sql_thread1=new sql_thread(myQueue);
Thread t1=new Thread(sql_thread1);
sql_thread sql_thread2=new sql_thread(myQueue);
Thread t2=new Thread(sql_thread2);
//******启动线程
t1.start();
t2.start();
}
}
//*************************************sql操作线程*****************************************************
public class sql_thread implements Runnable{
private sqliteQueue myQueue;
public sql_thread (sqliteQueue myQueue) {
this.myQueue=myQueue;
}
@Override
public void run() {
for (int i=0;i<1000;i++){
insert_Record("插入1",“插入2”); // 本地有查询方法就不用传入myQueue,否则参数里需要带上myQueue直到传递到sqlite操作方法里
}
}
//********************************写数据库**************************************************************
public static Boolean insert_Record (final String cardno,final String card_type) {
return myQueue.execute(new sqliteJob<Boolean>() {
protected Boolean job(sqliteConnection connection) throws sqliteException {
sqliteStatement st = connection.prepare("insert into record(cardno,card_type) values (?,?)");
try {
st.bind(1,cardno);
st.bind(2,card_type);
st.step();
return true;
} finally {
st.dispose();
}
}
}).complete();
}
//结束
}
如果有什么疑问可以留言。
原文链接:https://www.f2er.com/sqlite/200793.html