关于blackberry平台下sqlite事务的处理方式

本文详细阐述了在SQL数据库中进行事务管理的重要性,并通过实例展示了如何在一个事务中同时操作多张表,确保数据一致性的同时避免内存泄漏。重点强调了Statement对象的正确使用时机和关闭策略,以实现高效且安全的数据更新过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天开发的时候遇到一个用例,简单描述就是在删除一张表里面某条数据的同事,要删除另外的一张表,注意是一张表,而不是记录。

代码实现:

/**
	 * 删除单个对话以及对话包含的消息表
	 * @param uuid
	 * @return
	 */
	public boolean deleteSingleChat(long uuid){
		Statement st = null;
		Database db = super.getSQLiteDatabase();
		try {
			db.beginTransaction();
			st  =  db.createStatement(DELETE_CHAT_SQL);
			st.prepare();
			st.bind(1, uuid);
			st.execute();
			st.close();
			st  =  db.createStatement(DROP_MSG_TABLE + MsgSchema.MSG_TABLE_NAME_HEAD + uuid + ";");
			st.prepare();
			st.execute();
			db.commitTransaction();
			return true;
		} catch (DatabaseException e) {
			return false;
		}finally{
			super.closeStatement(st);
		}
	}
 

这里需要注意的就是你必须要开启事务来保证业务的一致性。

所以需要

db.beginTransaction();
.....
db.commitTransaction();
那么在事务中有任何的问题和异常,sqlite都会回滚操作。

其次还应该注意对Statment的打开和关闭的时机,请注意,因为我要在事务里面操作两张表,也就是我需要两个Statment

st  =  db.createStatement(DROP_MSG_TABLE + MsgSchema.MSG_TABLE_NAME_HEAD + uuid + ";");

st  =  db.createStatement(DELETE_CHAT_SQL);


那么当我在第一次使用st之后,我必须要st.close(),然后在开启第二个st的时候仍然需要st.prepare();这样才能保证第二次正常的引用st对象。

还有就是在代码的finally里面要对st及时的关闭,避免内存泄漏。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值