SQLite多线程共用 一个connection的问题

tianpeng91 发布于 2013/04/11 08:55
阅读 5K+
收藏 0
因SQLite的便捷,方便项目到处可以直接跑,因此小弟选用了SQLite,但最近出现一个问题额,当一个db文件,多线程既有查询,又有更新的时候,因为建立连接太耗时,因此就用一个连接(暂时没有用线程池)。然后就蛋疼了,一直出问题:unable to open database file  ,网上是说SQLite不是线程安全的,哪位帮忙解答下!谢谢。。。。
加载中
0
傅小黑
傅小黑
sqlite查询是并发的,写入是单线程的。。。最基本的文件锁
tianpeng91
tianpeng91
麻烦帮忙看下下面代码是否有问题?
tianpeng91
tianpeng91
回复 @傅小黑 : 操,真心蛋疼了
傅小黑
傅小黑
对。。要不然就得等待,很可能超时
tianpeng91
tianpeng91
也就是说有一个线程在写入的时候必须保证没有其它线程写入,是这个意思吗?
0
旧城的骁珖
旧城的骁珖
不能多线程共用一个conn。 那怎么办?
tianpeng91
tianpeng91
我现在蛋疼在
0
张亦俊
张亦俊

引用来自“普华之光”的答案

不能多线程共用一个conn。 那怎么办?
手工同步一下,保证同一时间只有一个在使用这个连接。
旧城的骁珖
旧城的骁珖
回复 @张浩春 : 能 建立多个conn,
tianpeng91
tianpeng91
麻烦帮忙看下下面代码是不是问题出在哪里 ?
tianpeng91
tianpeng91
SQLite好像只能一个连接吧??能不能同时建立多个连接呢?
0
tianpeng91
tianpeng91
public synchronized static void update(List<DownloadBean> beans) {
		Connection conn = Database.getInstance().getConnection("0.db");
		PreparedStatement stm = null;
		try {
			stm = conn.prepareStatement("update download set status=?,exception=?,time=? where id=?");
			if (beans != null && beans.size() > 0) {
				for (DownloadBean bean : beans) {
					stm.setInt(1, bean.getStatus());
					if (bean.getException() == null) {
						stm.setString(2, "");
					} else {
						stm.setString(2, bean.getException());
					}
					stm.setString(3, bean.getTime());
					stm.setString(4, bean.getId());
					stm.addBatch();
				}
				stm.executeBatch();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if (stm != null) {
				try {
					stm.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.commit();
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
上面是代码,为什么会在stm.executeBatch();这个地方发生异常呢??蛋疼啊,我同步了这个方法啊
0
好铁
好铁

是不是这样?

conn = sqlite3.connect(dbfile, check_same_thread=False)



返回顶部
顶部