手机应用开发中常常会使用到数据库存储一些资料或者进行数据缓存,android中为我们提供了一个轻量的数据库。在上层进行了一层封装,同一时候还为我们提供了ContentProvider的框架。方便我们进行数据操作。以及在不同的程序之间进行数据共享。

本文介绍一下,我在使用数据库的一些我觉得比較好的习惯,欢迎与我讨论。

关于框架

通常网络操作。Json解析。我都会使用框架,这样能够非常好的帮助我处理异常。处理异步操作。可是数据库操作我则使用自带的SQLiteHelper和ContentProvider。这样android系统在SQLite上为我们提供的一层封装。因此,我不再使用第三方的SQLite框架。SQLiteDatabase和ContentProvider为我们提供一下函数

1
2
3
4
5
query() //查询
insert() //插入
delete() //删除
update() //更新
//參数和返回值我没有写

能够看到。android为我们提供的操作已经被封装了,非常多地方和别的ORM框架也是有一些类似的。并且在android中我们通常不会存储非常复杂的数据结构,不是必需给自己学习框架添加成本。

 数据库建库升级等原则

先看一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
private final class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(final Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
/**
* 1-->2 add header table
* 2-->3 update info
* 3--> update info haha
*
*/
public static final int DB_VERSION = 4;
public static final String DB_NAME = "download";
/**
* Creates database the first time we try to open it.
*/
@Override
public void onCreate(final SQLiteDatabase db) {
if (Constants.LOGVV) {
Log.v(Constants.TAG, "populating new database");
}
onUpgrade(db, 0, DB_VERSION);
}
/**
* Updates the database format when a content provider is used
* with a database that was created with a different format.
*
* Note: to support downgrades, creating a table should always drop it first if it already
* exists.
*/
@Override
public void onUpgrade(final SQLiteDatabase db, int oldV, final int newV) {
for (int version = oldV + 1; version <= newV; version++) {
upgradeTo(db, version);
}
}
/**
* Upgrade database from (version - 1) to version.
*/
private void upgradeTo(SQLiteDatabase db, int version) {
switch (version) {
case 1:
createDownloadsTable(db);
break;
case 2:
createHeadersTable(db);
break;
case 3:
addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_IS_PUBLIC_API,
"INTEGER NOT NULL DEFAULT 0");
addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOW_ROAMING,
"INTEGER NOT NULL DEFAULT 0");
addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES,
"INTEGER NOT NULL DEFAULT 0");
break;
case 103:
addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI,
"INTEGER NOT NULL DEFAULT 1");
makeCacheDownloadsInvisible(db);
break;
case 4:
addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT,
"INTEGER NOT NULL DEFAULT 0");
break;
default:
throw new IllegalStateException("Don't know how to upgrade to " + version);
}
}

以上代码是摘自android 中的DownloadProvider的DatabaseHelper代码。我在这里主要是像推荐这样的数据库的建表,最初接触这样的建表方式是在曾经阅读DownloadManager的时候发现,发现android中这样的设计真的是很精妙。这样的方式。方便数据库的升级,在update数据库和create数据库的时候。能够共用建表,改动数据表的代码,同一时候能够清晰看到数据库的变化。

同一时候建议,在改动数据库版本号的时候。在版本号号上面添加凝视。写上数据库升级的内容,方便自己以后看到数据库的变化。以及其它人在看代码时候。了解到数据库的变化。

数据库建表和数据存储建议

一些简单的配置文件,不建议存到数据库,存到sharepreference中。方便存取,同一时候也提高訪问速度。

文件。图片等绝对不要存到数据库,存储文件路径到数据库中就可以。

一些非常复杂的数据,建议直接转成json存到数据库就可以。

一些缓存也能够这样存储。

其它要说的

数据库操作时候,不要在主线程操作。这是耗时操作,easy造成ANR.

在进行数据库中的数据显示时候。建议配合CursorLoader使用。这是android提供的异步数据载入。同一时候会在数据变化时候,自己主动又一次刷新数据。

其它。本文。本人乱扯。

如有你有异议,欢迎回复讨论。

原文地址:http://blog.isming.me/2014/10/13/good-database-use/,转载请注明出处。

Android中个人推崇的数据库使用方式相关推荐

  1. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  2. [转]Android中程序与Service交互的方式——交互方式

    本文转自:http://blog.csdn.net/yihongyuelan/article/details/7216188 上一篇文章:Android中程序与Service交互的方式--综述 简述了 ...

  3. android xpath解析xml,Android 中处理 XML 的四种方式-DOM

    Android 中处理 XML 的几种方式连载中,我们就不介绍合成 XML 了,因为合成 XML 可以直接拼接字符串,虽然看起很不高大上,但却很有效.我们主要介绍如何取 XML 中的值. 适用 DOM ...

  4. Android中播放音乐的几种方式

    Android中播放音乐的几种方式 前言 前几天一直在研究RxJava2,也写了记录了几篇博客,但因为工作任务原因,需要研究音频相关的知识,暂时放下Rxjava,本文的demo中,MediaPalye ...

  5. Android 中设置线程优先级的正确方式(2种方法)

    Android 中设置线程优先级的正确方式(2种方法) 在 Android 中,有两种常见的设置线程优先级的方式: 第一种,使用 Thread 类实例的 setPriority 方法,来设置线程优先级 ...

  6. 在Android中通过导入静态数据库来提高应用第一次的启动速度

    一个Android应用给用户的第一印象非常重要,除了要有好的创意和美观的界面,性能也是很关键的部分,本文讨论的就是第一次启动的速度问题. Android应用的启动过程不能让用户等待太长时间,个人觉得最 ...

  7. 深入剖析Android中最简单的数据存储方式:SharedPreferences

    目录 一. 使用SharedPreferences存储数据 二. 数据的存储位置和格式 三.存储数据的获取 四. 存取复杂类型的数据 五. 设置数据文件的访问权限 Hello,你好呀,我是灰小猿,一个 ...

  8. Android中Video的三种播放方式的实现

     在Android中,我们有三种方式来实现视频的播放. 1.使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2.使用VideoView来 ...

  9. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

最新文章

  1. RK3399 Ubuntu修改任务栏为自动隐藏和修改桌面背景
  2. 东田纳西州立大学计算机排名,2019东田纳西州立大学世界排名
  3. Linux大文件切割命令split
  4. Gartner:到2020年人工智能将创造出230万个工作岗位
  5. UI渲染回顾简单笔记
  6. 后台命名查询sql查某几个字段传到前台
  7. No Identifier specified for entity的解决办法
  8. alm数据库mysql_mysql
  9. 我的服务端JS文件合并工具
  10. 《流畅的Python》读书笔记——Python序列的修改、散列和切片
  11. [JSOI2009]瓶子和燃料
  12. mysql key语句_mysql建表语句key的含义
  13. 基于单片机的数字万年历设计
  14. intel ax200ngw刷killer 1650x教程
  15. contest3 CF994 div2 ooxxx? oooox? ooooo?
  16. python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...
  17. 理解什么叫“自然拼读”
  18. python中的dic.items(), dic.keys(), dic.values()
  19. 消除小黑点html,word黑点怎么去掉,Word文档项目编号前有个小黑点
  20. python中arcsec_主页

热门文章

  1. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18)
  2. Hyperic HQ HQU 插件开发指南
  3. WCF Data Service安全分析和说明
  4. 用Windows Live Writer发布博客也可以不生成缩略图
  5. 一次性打开计算机任意程序的脚本(C语言)
  6. 二叉树的非递归遍历(c/c++)
  7. 微服务下的容器部署和管理平台Rancher
  8. day-20: 安装软件包及rpm yum的介绍
  9. 高性能服务器架构(二):缓存清理策略
  10. “极致”神话和产品观念_转自“蜗窝科技”