1.SQLite事务

简单点说就是:写在事务里的所有数据库操作都成功,事务提交,否则,事务回滚,就是回到前面 的状态——未执行数据库操作的时候!另外,前面我们也将了,在data/data/<包名>/database/目录 下除了有我们创建的db文件外,还有一个xxx.db-journal这个文件就是用来让数据库支持事务而 产生的 临时的日志文件!

2.SQLite存储大二进制文件

当然,一般我们很少往数据库中存储大二进制文件,比如图片,音频,视频等,对于这些我们一般 是存储文件路径,但总会有些奇葩的需求,某天你突然想把这些文件存到数据库里,下面我们以 图片为例子,将图片保存到SQLite中,以及读取SQLite中的图片!

3.SimpleCursorAdapter绑定数据库数据

当然,这个玩玩可以,还是不建议使用,尽管用起来很简单! 其实在讲ContentProvider我们就使用过这个东西来绑定联系人列表!这里就不写实例了, 直接上核心代码!需要的自己捣鼓捣鼓就好了,另外,现在我们一般很少自己写数据库的东西 ,一般是通过第三方的框架:ormlite,greenDao等,在进阶部分,我们会再来学习~

4.数据库升级的一些集锦

1)什么是数据库版本升级?怎么升级法?

答:假如我们开发了一款APP,里面用到了数据库,我们假定这个数据库版本为v1.0, 在这个版本,我们创建了一个x.db的数据库文件,我们通过onCreate()方法创建了第一个table, t_user,里面有两个字段:_id,user_id;后面我们想增加一个字段user_name,这个时候 我们就需要对数据库表的结构进行修改了,而我们可以把更新数据库的操作梵高onUpgrade() 方法中,我们只需要在实例化自定义SQLiteOpenHelper的时候,修改版本号,比如把1改成2 这样,就会自动调用onUpgrade()的方法了!另外,对于每个数据库版本我们都应该做好 相应的记录(文档),类似于下面这种:

2)一些疑问以及相关解决方案

①应用升级,数据库文件是否会删除?

答:不会!数据什么的都在!

②如果我想删除表中某个字段或者增加一个新的字段,原先的数据还在吗?

答:在的!

③你刚说的那种粗暴的更新数据库版本的方式,不保留数据的,可以贴下吗?

答:可以,这里用的是第三方的ormlite,你也可以自己写数据库创建以及删除的代码:

④比如是这种,假如我们已经升级到第三个版本了,我们在第二个版本增加了一个表, 然后第三个版本也增加了一个表,加入用户直接从第一个版本升级到第三个版本,这样 没经过第二个版本,就没有增加的那个表,这可怎么破?

答:很简单,我们可以在onUpgrade()里写一个switch(),结构如下:

public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,int arg2, int arg3) {switch(arg2){case 1:db.execSQL(第一个版本的建表语句);case 2:db.execSQL(第二个版本的建表语句);case 3:db.execSQL(第三个版本的建表语句); }
}

细心的你可能发现这里并没有写break,这就对了,这是为了保证跨版本升级时,每次数据库 修改都能全部执行到!这样可以保证表结构都是最新的!另外不一定是建表语句,修改表结构 也可以哦

⑤旧表的设计太糟糕,很多字段要改,改动太多,想建一个新表,但是表名要一样 而且以前的一些数据要保存到新表中!

答:下面说下思路:
1.将旧表改名成临时表: ALTER TABLE User RENAME TO _temp_User;
2.创建新表: CREATE TABLE User (u_id INTEGER PRIMARY KEY,u_name VARCHAR(20),u_age VARCHAR(4));
3.导入数据; INSERT INTO User SELECT u_id,u_name,”18” FROM _temp_User; //原表中没有的要自己设个默认值
4.删除临时表; DROP TABLE_temp_User;

数据存储之-SQLite数据库二相关推荐

  1. 数据存储之 SQLite 数据库操作(二)

    上一讲我们讲解了SQLite数据库的创建[数据存储之 SQLite 数据库操作(一)],还有更新的操作,这一讲我们来讲解一下数据库的增删改查,这边的程序是对上一个程序进行修改,建议结合上一讲内容进行学 ...

  2. 数据存储之 SQLite 数据库操作(三)

    上一讲中我们讲到了SQLite数据库的操作方法 [数据存储之SQLite数据库操作(二)],我们主要是以SQL语句对数据库进行增删改查,这一讲我们来学习一下 Android 建议的对数据库的操作方法 ...

  3. 安卓 sqlite数据存入mysql_详解Android数据存储—使用SQLite数据库

    SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库.Android提供了3种操作数据的方式,SharedPreference(共享首选项).文件存储以及SQLite数据库. ...

  4. 数据存储之 SQLite 数据库操作(一)

    这一讲我们来讲解一下数据库的存储方式 ,SQLite数据库属于文本型的数据库,它是以文本的形式来保存的. 1. SQLite 数据库介绍 查看 Android API文档中 SQLite 的介绍    ...

  5. Android 数据存储之SQLite数据库

    转载请标明出处: http://blog.csdn.net/airsaid/article/details/52419418 本文出自:周游的博客 前言 SQLiteDatabase 创建数据库和表 ...

  6. 数据存储之-SQLite数据库一

    概述 SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便! SQLite支持 ...

  7. Android数据存储之SQLite数据库存储

    Android中每一个数据库对创建它的应用程序包套件来说都是私有的,默认情况下其他应用程序无法直接访问此私有数据库.所有的数据库文件存放在手机中的/data/data/package_name/dat ...

  8. 2010-02-28 传智播客—Android(三)数据存储之三SQLite嵌入式数据库

    2010-02-28 传智播客-Android(三)数据存储之三SQLite嵌入式数据库 前两篇日志我已经总结了本地数据存储的前两种:文件和配置项.还剩下最后一种数据库存储--SQLite. 一.SQ ...

  9. IOS数据存储 之WCDB (二)WCDB.swift使用篇

    IOS数据存储 之WCDB (二)WCDB.swift使用篇 1.WCDB.Swfit基础使用 1.1 WCDB.Swfit 简介 1.1.1 模型绑定 1.1.2 创建数据库与表 1.1.3 操作数 ...

最新文章

  1. 开源一个上架 App Store 的相机 App
  2. 简历包装要避开哪些坑,资深面试官告诉你!
  3. 浅析应届女生找工作的一些忧虑和困惑
  4. Resource interpreted as Stylesheet but transferred with MIME type text/html: “**.jsp“,主要因为拦截器将所有资源拦截
  5. Sqoop导入导出的时候总是出现等待5分钟的问题解决办法
  6. Ubuntu 12.04 安装g++ arm交叉编译环境
  7. 细细品味C#——文件操作
  8. 利用modelarts和物体检测方式识别验证码
  9. 情报使能 合作共赢 | TI INSIDE计划发布会即将开始
  10. dedeindex php不显示_dede去掉(禁止)首页index.html默认访问 最终显示index.php
  11. 【最小生成树】还是畅通工程
  12. Oracle视图传递参数
  13. 小学身高体重测试软件,儿童身高体重在线测评
  14. 汉字字符集编码查询_刨根究底字符编码之十——Unicode字符集的字符编码方式...
  15. 山西计算机专业三本大学排名,2021山西三本院校排名 最新大学排行榜
  16. MySQL——MySQL逻辑架构
  17. 如何看待IT行业发展前景,就业前景和人才需求趋势
  18. GLSL到HLSL参考
  19. 在网页地图图片上加注企业和“圳品”数量信息+1
  20. PO模式实现Appium脚本封装

热门文章

  1. C++基类和派生类的析构函数
  2. Leetcode 79. 单词搜索 (每日一题 20210720 同类型题)
  3. 判断一颗二叉树是否是平衡二叉树
  4. python笔记:jieba(中文分词)
  5. tkinter笔记:画布canvas
  6. 机器学习笔记 invariance data augmentation
  7. NTU -SCSE-orientation
  8. 知识归纳,程序猿必备的21张(神经网络、线性代数、可视化等)数据挖掘速查表
  9. 强化学习(十四) Actor-Critic
  10. c++结构体定义和使用_[day day go]结构体amp;给结构定义方法