博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中个人推崇的数据库使用方式
阅读量:4595 次
发布时间:2019-06-09

本文共 3262 字,大约阅读时间需要 10 分钟。

手机应用开发中常常会使用到数据库存储一些资料或者进行数据缓存,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提供的异步数据载入。同一时候会在数据变化时候,自己主动又一次刷新数据。

其它。本文。本人乱扯。

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

原文地址:,转载请注明出处。

posted on
2017-05-17 09:55 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/mthoutai/p/6866039.html

你可能感兴趣的文章
vue学习之组件
查看>>
python-multiprocessing模块
查看>>
WordPress学习
查看>>
单一职责原则
查看>>
virtualbox 安装 USB 扩展功能
查看>>
clang: error: linker command failed with exit code 1 (use -v to see invocation) 无法定位的问题...
查看>>
HDU 4003 Find Metal Mineral(分组背包+树形DP)
查看>>
数据导出和TreeView
查看>>
UI图标不用愁:矢量字体图标Font-Awesome
查看>>
android事件传递机制以及onInterceptTouchEvent()和onTouchEvent()详解二之小秘与领导的故事...
查看>>
指针数组和数组指针的区别
查看>>
KNN和SVM的区别和联系
查看>>
JAVA的Random类 Java中的Random()函数
查看>>
判断手机横屏和竖屏方向
查看>>
动态闪字
查看>>
docker入门1---docker的简介和安装
查看>>
MyEclipse2017修改Web Context Root
查看>>
svn的使用总结
查看>>
ERP光有主生产计划不够 还得详细生产排程
查看>>
HTML5 2D平台游戏开发#2跳跃与二段跳
查看>>