Android SQLite数据库事务+存储二进制文件

本文介绍SQLite事务处理机制及应用案例,包括事务的开启、提交与回滚过程,并探讨了在SQLite中存储二进制文件的方法。

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

一.事务

 

1.sqlite事务简介

  关于SQLite事务可以解决一些问题,比如你要插入两个数据,可以将两个数据作为同一个事务进行插入,这样如果第二个数据错误了,便自动执行回滚操作,第一个数据也不会插入成功,保证了数据的同步

 

 

 

2.举例

A转给B100块钱,那么A的存储要减去100,B的存储也要增加100,两个条件要同时满足才能完成交易(提交事务),但是假如B账户的钱没有增加,而A已经扣了100快,这样显然是不可以的。所以要把A的100快返回给他,就是回复原样(事务回滚)。总的来说就是两个或多个操作绑定到一起的操作,只有所有操作都执行了,事务才算执行完毕,才提交。如果有一个操作没有执行的话,那么事务就会回滚,就是恢复原型,之前做的操作都会销毁。

 

 

 

3.解决方法

 

 

 

4.说明

beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事务处理应用:很多时候我们需要批量的向Sqlite中插入大量数据时,单独的使用添加方法导致应用响应缓慢, 因为sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。如初始8000条记录也就是要8000次读写磁盘操作。同时也是为了保证数据的一致性,避免出现数据缺失等情况。

 

 

 

5.代码举例

package com.wjn.viewlistdemo.activity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.wjn.viewlistdemo.R;
import com.wjn.viewlistdemo.utils.StatusBarUtil;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //根据状态栏颜色来决定 状态栏背景 用黑色还是白色 true:是否修改状态栏字体颜色
        StatusBarUtil.setStatusBarMode(this, false, false, R.color.colorPrimary);
    }

    /**
     * 添加用户
     */

    public void addUser(List<User> list) {
        if (db.isOpen()) {//如果数据库是打开的
            db.beginTransaction();//开启事务
            for (int i = 0; i < list.size(); i++) {
                User user = list.get(i);//获取用户对象
                String sql = "insert into user(id,name, path)" + "VALUES(?,?,?)";//sqlite 插入语句
                db.execSQL(sql, new Object[]{user.getId(), user.getName(), user.getPath()});//执行插入语句
            }
            db.setTransactionSuccessful();//事务成功
            db.endTransaction();//结束事务
            db.close();//关闭数据库
        }
    }

}

 

 

 

 

 

 

二.存储二进制文件

 

SQLite存储大二进制文件

一般我们很少往数据库中存储大二进制文件,比如图片,音频,视频等,对于这些我们一般 是存储文件路径,但如果右这样的需求,下面我们以 图片为例子,将图片保存到SQLite中,以及读取SQLite中的图片!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值