第六章 数据存储全方案-详解持久化技术
2016-12-08 16:05
309 查看
文件存储
不适合保存一些复杂的数据,解析不方便1. 将数据存储到文件中
context.openFileOutPut(fileName,MODE_PRIVATE/MODE_APPEND)
可以拿到一个文件输出流,然后操作,MODE_PRIVATE表示新写入的内容会覆盖旧的内容,MODE_APPEND表示会添加到后面。
注意:文件名不能包括路径,默认存储在data/data/包名/files/目录下
2. 从文件中读取数据
context.openFileInPut(fileName)
注意:同上
SharedPrefernces
目录:data/data/包名/shared_prefs/…Activity中有一个getPreferences(),会以类名为文件名返回一个对象
context.getSharePreferences()
PreferenceManager.getDefaultSharedPreferences()静态方法,以包名为前缀命名文件
SQLite数据库存储
当数据库不可写入的时候(例如磁盘已满),getReadableDatabase()返回的对象将以只读的形式去打开数据库,而
getWritableDatabase()则抛出异常
存放位置
data/data/包名/databases/...
数据类型
integer 整形
real 浮点型
text 文本
blob 布尔
primart key 主键
autoincrement 自增长
第一次调用getXXXXDatabase()的时候检测到没有数据库,就会调用helper类的onCreate()方法
数据库目录下有“两个”文件
xxx.db 就是我们创建的数据库文件
xxx.db-journal 为了让数据库支持事务操作,产生的临时文件
命令
sqlite3 xxx.db 就可以进入某一个数据库了
.table 查看已有的表
.schema 查看建表语句
更新数据库的表
onCreate方法只有在创建数据库(xx.db)的时候才会执行,所以不能直接在onCreate中执行
在onUpgrade中执行,先把存在的表删除,然后重新执行创建
db.execSQL('drop table if exists XXX(表名)'); onCreate(db);
需要更新构造方法中的版本号,比上一个大就ok
query()方法参数 | 对应的SQL部分 |
---|---|
table | from table_name |
columns | select column1,column2 |
selection | where column = value |
selectionArgs | where column = value |
groupBy | group by column |
having | having column = value |
orderBy | order by column1,column2 |
使用LitePal操作数据库
build.gradle中引入laitePal的地址app/src/main下创建asset->litepal.xml
<?xml version="1.0" encoding="utf-8"?> <LitePal> <dbname value="表名"></dbname> <version value="1"></version> <list> <mapping class="com.xk.test.litepal.User"></mapping> </list> </LitePal>
清单文件中配置application为org.litepal.LitePalApplication
对bean进行表管理的时候无所谓,如果要进行增删改查,需要继承DataSupport
更新数据
最简单的更新已存在的,直接save即可,那么什么是已存在的呢?
model.save();之后
通过查询获取到的model
上一中方法只能对已存储的更新,限制大还可以这样做
Model model=new Model(); //... model.updateAll(String... 条件);
model.updateAll("name = ? and author = ?","名字","作者");
==注意==
java中的数据类型都有默认值,例如int的默认值是0
如果创建一个User,setName,但是不setAge,这样age依旧是0,LitePal认为没有设置age,所以就不更新age
那么创建一个User,setAge(0),跟默认值大小一样,所以LitePal依旧认为没有设置age,所以也不会更新,这种情况下可以这样写:
book.setToDefault("age");
int 默认值0 boolean默认值false
删除数据
model.delete(); 也是针对已存在的数据,这个已存在在上面已经说过了
DataSupprot.deleteAll(Model.class,”price <”,”15”);//不指定条件代表要删除所有数据
查询数据
查询所有
List<Model> models=DataSupport.findAll(Model.class);
Model model=DataSupport.findFirst(Model.class);
Model model=DataSupport.findLast(Model.class);
更多查询
利用select查询指定列DataSupport.select(“列名1”,”列名2”).find(Model.class);
利用where查询DataSupport.where(“pages >”,”15”).find(Model.class);
DataSupport.order(“pages desc”).find(Model.class);//排序 desc=降序 asc/不写=升序
DataSupport.limit(3).find(Model.class);//前三条数据
DataSupport.limit(3).offset(1).find(Model.class);//查询三条数据,偏移1,所以结果是第二三四条数据
相关文章推荐
- 第六章 数据存储全方案,详解持久化技术
- 数据存储全方案,详解持久化技术
- 第六章,数据持久化方案, 详解持久化技术
- 数据存储全方案,详解持久化技术
- 【数据存储全方案,详解 持久化技术】实现记住密码功能
- 数据存储全方案,详解持久化技术
- 阅读郭林《第一行代码》的笔记——第6章 数据存储全方案,详解持久化技术
- 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术
- android 摘要----数据存储全方案,详解持久化技术
- day05 数据存储方案,详解持久化技术
- 【数据存储全方案,详解 持久化技术】SharedPreferences存储
- 数据存储全方案,详解持久化技术
- 数据存储全方案--详解持久化技术
- 数据存储全方案--详解持久化技术
- 数据存储--------详解持久化技术
- 数据库存储全方案,详解持久化技术
- 第一行代码读书笔记——数据存储全方案,持久化技术
- 数据存储方案:持久化技术
- 第一行代码-第6章 数据存储方案,持久化技术
- 万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系