文档章节

android sqlite事务处理批量sql语句

李光正
 李光正
发布于 2015/10/15 14:53
字数 449
阅读 54
收藏 0

应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。

而且不能保证所有数据都能同时插入。(有可能部分插入成功,另外一部分失败,后续还得删除。太麻烦)

解决方法:

添加事务处理,把5000条插入作为一个事务

 

我们使用SQLite的事务进行控制:

        db.beginTransaction();  //手动设置开始事务

        try{

            //批量处理操作

            for(Collection c:colls){

                insert(db, c);

            }

            db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交。

//setTransactionSuccessfulendTransaction之间不进行任何数据库操作 

           }catch(Exception e){

               MyLog.printStackTraceString(e);

           }finally{

               db.endTransaction(); //处理完成

           }

1.使用SQLiteDatabasebeginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功,则所有从beginTransaction()开始的操作都会被提交,如果没有调用setTransactionSuccessful() 方法则回滚事务。 

2.使用例子如下:下面两条SQL语句在同一个事务中执行。

Java代码

  1. //银行账户事务测试  
  1. public void payment()  
  1. {  
  1.     SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  2.     //开启事务  
  1.     db.beginTransaction();  
  1.     try  
  1.     {  
  1.         db.execSQL("update person set amount=amount-10 where personid=?", new Object[]{1});  
  1.         db.execSQL("update person set amount=amount+10 where personid=?", new Object[]{2});  
  1.         //设置事务标志为成功,当结束事务时就会提交事务  
  1.         db.setTransactionSuccessful();  
  2.     }  
  1.    catchException e{
  2.         throw(e);
  1.     }
  1.     finally  
  2.     {  
  1.         //结束事务  
  1.         db.endTransaction();  
  1.     }  

本文转载自:http://blog.csdn.net/liguangzhenghi/article/details/8913886

共有 人打赏支持
李光正
粉丝 5
博文 64
码字总数 0
作品 0
大兴
私信 提问
Android 开发中使用 SQLite 数据库

SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都...

红薯
2010/08/22
67.2K
32
Android 小项目之--SQLite 使用法门

每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库 --大名鼎鼎的SQLite。SQLite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资...

mayi
2011/11/14
0
2
android sqlite 批量插入

1手动处理sqlite 的事务 http://blog.csdn.net/pipisky2006/article/details/6917399 SQLite的数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频...

tfc
2012/08/15
0
0
SQLite命令行访问Android数据库

登录Android Shell D:android-sdk-windowsplatform-toolsadb shell 应该出现#提示,如果是$提示,请按照上面链接获取ROOT权限。 sqlite命令 sqlite3 /data/data/com.easymorse.demo/files/my......

xiahuawuyu
2013/01/06
0
0
SqlLite的工具类SQLiteOpenHelper

package com.zhxjz.map.util; import java.util.List; import org.apache.commons.lang.math.NumberUtils; import android.content.Context;import android.database.Cursor;import android.......

阿宇_
2015/08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

LIst的逆向遍历

public class list_demo { public static void main(String[] args) {// TODO Auto-generated method stub List list=new ArrayList<>(); list.add("a"); list.add("b");......

南桥北木
33分钟前
2
0
Linux下端口转发工具rinetd介绍

linux下简单好用的工具rinetd,实现端口映射/转发/重定向,针对TCP协议,不支持UDP。 官网地址 http://www.boutell.com/rinetd 里面介绍及使用齐全。 使用场景举例: 阿里云内网Redis连接问题...

ouhoo
46分钟前
4
0
Oracle学习日志-5(算数运算符,比较运算符和逻辑运算符)

因为有编程基础,所以对于这一章还是很好理解,只需要注意对NULL的运算。 操作的表格 算数运算符 查询商品名字和商品售价,并商品售价乘2 SELECT product_name,sale_price * 2 AS "sale_pri...

白话
59分钟前
1
0
搜索引擎(Lucene介绍、分词器详解)

Lucene介绍 Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简...

这很耳东先生
今天
4
0
quartz详细介绍

quartz常用api Scheduler 调度程序交互的主要API。 Job 希望由调度程序执行的组件实现的接口。 JobDetail 用于定义作业的实例。 JobDataMap 可以包含不限量的序列化数据,在job运行的时候可以...

大笨象会跳舞吧
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部