当前位置: 首页 > news >正文

Android SQLite使用事务来确保所有语句都以原子方式执行及保证数据完整性一次执行多条语句示例

execSQL 不支持用分号分隔一次执行多个 SQL 语句,虽然理论上可以实现。但是,并不建议这样做,因为这可能会导致潜在的 SQL 注入漏洞。相反,建议使用 execSQL rawQuery 分别执行每个语句。
在下面的代码块中,我们正在使用 execSQL 分别执行三个单独的 SQL 语句:创建表、向表中插入数据以及从表中查询数据。
如果需要一次执行多个语句,可以使用事务来确保所有语句都以原子方式执行。以下是一个示例:

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("test.db", null);try {db.beginTransaction();db.execSQL("CREATE TABLE IF NOT EXISTS user(" +"id INTEGER PRIMARY KEY AUTOINCREMENT," +"name TEXT," +"age INTEGER)");db.execSQL("INSERT INTO user(name, age) VALUES('Tom', 18)");Cursor cursor = db.rawQuery("SELECT * FROM user", null);while (cursor.moveToNext()) {int id = cursor.getInt(cursor.getColumnIndex("id"));String name = cursor.getString(cursor.getColumnIndex("name"));int age = cursor.getInt(cursor.getColumnIndex("age"));Log.d("TAG", "id: " + id + ", name: " + name + ", age: " + age);}cursor.close();db.setTransactionSuccessful();
} finally {db.endTransaction();db.close();
}

 说明:

在此示例中,所有三个 SQL 语句都在同一个事务内执行。
beginTransaction 方法开始事务,
setTransactionSuccessful 方法将事务标记为成功。
如果在调用 setTransactionSuccessful 之前抛出异常,则事务会自动回滚。
endTransaction 方法结束事务,
如果调用了 setTransactionSuccessful,则提交更改,否则回滚更改。从而保证数据一致性。

http://www.lryc.cn/news/42462.html

相关文章:

  • nodejs+vue校园超市小卖部零食在线购物商城系统
  • Karl Guttag:论相机对焦技术在AR/VR中的沿用
  • ECL@SS学习笔记(3)-概念数据模型
  • 206. 反转链表
  • 文心一言 vs GPT-4 —— 全面横向比较
  • rancher2.6进阶之kubectl安装
  • 图像基本变换
  • 基于文心一言的底层视觉理解,百度网盘把「猫」换成了「黄色的猫」
  • 安卓开发的环境配置教程
  • 【Spring Cloud Alibaba】Spring Cloud Alibaba 搭建教程
  • 关于自动机器学习flaml训练时的一些报错
  • 【计算机视觉】消融实验(Ablation Study)是什么?
  • Java毕业论文参考文献参考例子整理
  • C++ Primer第五版_第六章习题答案(21~30)
  • SLAM算法之HectorSLAM,Gmapping,KartoSLAM,CoreSLAM和LagoSLAM
  • phpstorm断点调试
  • 做一个前端网页送给女朋友~轮播图+纪念日
  • CSDN 编程竞赛三十九期题解
  • ChatGPT来了你慌了吗?
  • Dijkstra 算法
  • EIgamal 算法实现与解读
  • 静态通讯录动态通讯录制作详解
  • 2023最新最详细【接口测试总结】
  • 【java基础】Stream流的各种操作
  • 【Python练习】序列结构
  • CDN加速缓存的定义与作用
  • Java并发高频面试题
  • CVPR 2023 | 旷视研究院入选论文亮点解读
  • Vue3 学习总结补充(一)
  • 使用ChatGPT 开放的 API 接口可以开发哪些自研工具?