1. 程式人生 > >android sqlite事務處理批量sql語句

android sqlite事務處理批量sql語句

應用程式初始化時需要批量的向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.     }  

相關推薦

android sqlite事務處理批量sql語句

應用程式初始化時需要批量的向sqlite中插入大量資料,單獨的使用for+Insert方法導致應用響應緩慢,因為 sqlite插入資料的時候預設一條語句就是一個事務,有多少條資料就有多少次磁碟操作。我的應用初始5000條記錄也就是要5000次讀寫磁碟操作。 而且不能保

Android SQLite 事務處理

原文章: 應用程式初始化時需要批量的向sqlite中插入大量資料,單獨的使用for+Insert方法導致應用響應緩慢,因為 sqlite插入資料的時候預設一條語句就是一個事務,有多少條資料就有多少次磁碟操作。我的應用初始5000條記錄也就是要5000次讀寫磁碟操作。 而

Excel生成批量SQL語句處理大量資料的好辦法

當有大量重複體力工作寫入或修改資料到資料庫中時,可以 第一,將Excel資料整理好了之後,通過SQL的匯入功能直接導進資料庫,但是得保證資料庫欄位和Excel的欄位一致。 第二,通過Excel來生成對應的SQL語句,直接將SQL語句複製到分析器裡面執行即可。 如:使用excel的

Android開發中的SQLite事務處理,即beginTransaction()方法

使用SQLiteDatabase的beginTransaction()方法可以開啟一個事務,程式執行到endTransaction() 方法時會檢查事務的標誌是否為成功,如果程式執行到endTransaction()之前呼叫了setTransactionSuccessful() 

navicat 匯出嚮導 , 通過Excel生成批量SQL語句處理大量資料

     如果要改一個數據量很大的表格的某些欄位,可以先將這個表格的資料匯出來,導成excel 形式: 工具:navicat formysql     資料庫:mysql 1. 2. 3.

通過Excel生成批量SQL語句處理大量資料的好辦法

我們經常會遇到這樣的要求:使用者給發過來一些資料,要我們直接給存放到資料庫裡面,有的是Insert,有的是Update等等,少量的資料我們可以採取最原始的辦法,也就是在SQL裡面用Insert into來實現,但是如果有幾十條几百條甚至上千條資料的時候繼續寫單獨的SQL語句

navicat 匯出嚮導 , 通過Excel生成批量SQL語句處理大量資料

     如果要改一個數據量很大的表格的某些欄位,可以先將這個表格的資料匯出來,導成excel 形式: 工具:navicat formysql     資料庫:mysql 1. 2. 3. 4. 5. 6. 7 . 8. 9. 然後就可以在e

SQLite資料庫小結】sql語句的兩種形式以及你不能不知的事務

android中對sql語句進行了兩種封裝。本質上都是封裝了sql語句,都需要通過SQLiteDtabase類使用其例項方法. NO.1 insert方法: 向資料庫新增一條記錄 dele

通過Excel生成批量SQL語句處理大量資料

我們經常會遇到這樣的要求:使用者給發過來一些資料,要我們直接給存放到資料庫裡面,有的是Insert,有的是Update等等,少量的資料我們可以採取最原始的辦法,也就是在SQL裡面用Insert into來實現,但是如果有幾十條几百條甚至上千條資料的時候繼續寫單獨的SQL語句的

mybatis批量sql語句

批量插入 對應sql insert into tabelname(colum1,colum2...) values(aa,aa...),(bb,bb...)  <!-- 批量插入資料 --> <insert id="insertBatch"

thinkphp---用事務處理批量操作

我們在進行一些業務邏輯的時候,難免會出現批量操作的問題,特別是批量修改操作,如果資料量大,總會考慮到批量修改到一半怎麼辦?所以如果使用事務來進行批量操作就會好很多,直接看程式碼:   public function edit(){ if(!IS_POST)die; $dat

SqlServer--bat批處理執行sql語句1-osql

首先需要知道,此處使用的批處理命令是osql ,如果安裝了SqlServer,目錄類似: D:\Program Files\Microsoft SQL Server\100\Tools\Binn 指令碼: cd D:\Program Files\Microsoft SQL

sqlite資料庫中的sql語句大全

2010年SQLite學習筆記之一 一. 如何獲取SQLite最新版本 即如下頁面下載 二.Windows下的SQLite的原始碼是哪個軟體壓縮包? 三.Window下的SQLite命令列工具 四.Window下的SQLite開發庫,即動態連結庫以及DEF檔案 五.SQLite最新版本是:

Sql Server資料庫事務介紹(二)---Sql語句,SqlTransaction和TransactionScope的使用方法

      本節主要介紹Sql語句,SqlTransaction和TransactionScope這三種使用事務的方法。       本節的所有例子都在sql server 2008和vs 2008環境下執行通過,如果沒有sql server2008,那麼使用sql serv

通過Excel生成批量SQL語句

我們經常會遇到這樣的要求:使用者給發過來一些資料,要我們直接給存放到資料庫裡面,有的是Insert,有的是Update等等,少量的資料我們可以採取最原始的辦法,也就是在SQL裡面用Insert into來實現,但是如果有幾十條几百條甚至上千條資料的時候繼續寫單獨的SQL語

SQLite一條SQL語句插入多條記錄,批量插入

為了減少資料庫連線的I/O開銷,一般會把多條資料插入放在一條SQL語句中一次執行。 以前用Mysql做開發一直是這樣用的: INSERT INTO TABLE(col1, col2) VALUES(val11, val12), (val21, val22) ; 最近用SQL

怎麼用批處理*.bat 執行檔案目錄下面的SQL語句指令碼(批量的)。。。@echo off是什麼意思?

Oracle下: 1.新增一個批處理檔案:如a.bat 2.新增一個SQL指令碼檔案:如a.sql 3.a.bat中輸入:sqlplus 使用者名稱/密碼 @C:\a.sql(假設a.sql在c:盤根目錄下) 4.然後執行這個批處理,就可以執行這個sql指令碼了.

springBoot(14):使用SQL關系型數據庫-事務處理

springboot springboot事務處理 一、事務的四個特性(ACID)原子性(Atomicity): 事務是一個原子操作,由一系列動作組成。事務的原子性確保動作要麽全部完成,要麽完全不起作用。一致性(Consistency): 一旦事務完成(不管成功還是失敗),系統必須確保它所建模的業務處

sql語句開啟事務

clas 開啟事務 span bsp pan err gin 示例代碼 spa 以下為示例代碼: begin tran update 表 set A的錢=A的錢+100 where 姓名=‘A‘ update 表 set B的錢=B

StringMVC 不需要事務再Controller寫SQL語句

drive brush .exe 插入 dex package auth word data String logsql = "INSERT INTO evrentallogs.log_edaijia(channel,orderId,status,driverNo,sig