Android中数据存储(三)——SQLite数据库存储数据
当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢?
数据存储方式
Android 的数据存储有5种方式:
1. SharedPreferences存储数据
SharedPreferences数据存储,也叫作xml存储。这是将数据存储“data/data/程序包名/share_prefs”路径下的到xml文件中。
相关连接:《Android中数据存储(一)——SharedPreferences存储数据》
2. 文件存储数据
分为内部储存和外部存储。内部存储是应用程序使用Android为自己分配的内存空间,数据存储到“/data/data/程序包名/files”路径下的相应文件中。外部存储是使用手机sdcard的内存(这个sdcard并不是我们经常说的那个可以拆卸替换的SD卡,那个SD卡我们称之为扩展卡),使用这部分内存要声明相应的权限。
相关连接: 《Android中数据存储(二)——文件存储数据 》
3. SQLite数据库存储数据
使用数据库进行存储,这个一般数据量比较大的时候。
相关连接:《Android中数据存储——SQLite数据库存储数据》
4. 使用ContentProvider存储数据
这个比较眼熟,ContentProvider也是Android的四大组件之一。ContentProvider一般是第三方提供的数据存储方式,向我们手机中的通讯录联系人,照片,音乐等……
相关连接:《Android中数据存储——ContentProvider存储数据 》
5. 网络存储数据
这个是将数据上传到网络上进行存储。
下面进入我们今天的主要内容,使用SQLite数据库存储数据。
SQLite数据库存储数据
SQLite是一个轻量级关系型数据库,既然是关系型数据库,那操作起来其实跟mysql、sql server差不多的。
SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。
对数据库SQLite进行操作,我们要借助于SQLiteOpenHelper类进行操作。对数据库的操作也就是”增、删、改、查“。在学习数据库的操作之前我们首先要学会如何创建数据库……
创建数据库
数据库的操作借助于SQLiteOpenHelper,SQLiteOpenHelper是一个抽象类,我们我们在使用SQLiteOpenHelper时要先创建一个MySQLiteOpenHelper继承SQLiteOpenHelper类。
SQLiteOpenHelper有两个非常重要的方法:getReadableDatabase()方法返回数据库是一个只读的;getWriteableDatabase()方法获得是一个可读写的数据库对象。这里我们使用getWriteableDatabase()方法获得数据库Database对象。
创建一个MySQLiteOpenHelper继承SQLiteOpenHelper类:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
//构造器,传入四个参数Context对象,数据库名字name,操作数据库的Cursor对象,版本号version。
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//自定义的构造器
public MySQLiteOpenHelper(Context context, String name) {
this(context, name, null, 1);//传入Context和数据库的名称,调用上面那个构造器
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//在创建数据库时,创建一个数据表table
String sql = "create table if not exists user(id integer primary key autoincrement, name varchar(20), passwords varchar(20))";
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
//用于升级数据库,只需要在创建本类对象时传入一个比之前创建传入的version大的数即可。
}
}
创建数据库:
//创建数据库
MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(getApplicationContext(), "create_db");//数据库名称为create_db。
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
增
使用SQLiteDatabase的insert(String table, String nullColumnHack, ContentValues values)方法插入数据。这个方法包含三个参数:
我们先列举一条SQLite中的插入语句:INSERT INTO user (name, passwords)] VALUES ("张三", "123456");
String table:操作的数据表的名称。
String nullColumnHack:用于我们在未指定添加数据的情况下,为数据表中可以添加null值的数据填入null值。一般这个参数我们传入null。
ContentValues values:用于传递数据,通常我们通过ContentValues 类的对象的putXXX()方法封装数据,然后将数据添加进数据库。
ContentValues 类,类似于java中的Map,以键值对的方式保存数据。
ContentValues value = new ContentValues();
value.put("name", "张三");//向数据表中字段名为name的字段中添加"张三"。
value.put("passwords", "123456");//向数据表中字段名为passwords的字段中添加"123456"。
//db数据库对象在前面已经创建,这里直接使用。
db.insert("user",null, value);//在数据库的user数据表中插入:字段名name为"张三",字段名passwords为"123456"的数据。
删
使用SQLiteDatabase的delete(String table, String whereClause, String[] whereArgs)方法删除数据。这个方法包含三个参数:
我们先列举一条SQLite中的删除语句:DELETE FROM user WHERE name="张三"。
String table:操作的数据表的名称。
String whereClause:约束删除行的条件。相当于SQLite语句中“where name=?“内容。
String[] whereArgs:与前一个参数对应约束删除行的条件。相当于”where name=”张三““中的”张三“。
注意:如果参数String whereClause和参数String[] whereArgs都传null的话,就是删除所有行。
//db数据库对象在前面已经创建,这里直接使用。
db.delete("user", "name=?", new String[]{"张三"});
改
使用SQLiteDatabase的 update (String table, ContentValues values, String whereClause, String[] whereArgs)方法删除数据。这个方法包含四个参数:
我们先列举一条SQLite中的修改语句:UPDATE user SET name= "李四", passwords= "123" WHERE name="张三"。
String table:操作的数据表的名称。
ContentValues values:用于传递数据,通常我们通过ContentValues 类的对象的putXXX()方法封装数据,然后将数据添加进数据库。
String whereClause:约束修改行的条件。相当于SQLite语句中“where name=?“内容。
String[] whereArgs:与前一个参数对应约束删除行的条件。相当于”where name=”张三““中的”张三“。
//db数据库对象在前面已经创建,这里直接使用。
ContentValues values = new ContentValues();
values.put("passwords", "abcd");
db.update("user", values, "name=?", new String[]{"张三"});
查
对于”查“操作,SQLiteDatabase提供了多种方法。
我们先列举一条SQLite中的修改语句:SELECT passwords="123" FROM user。
(1)使用SQL语句进行查询。这里SQLiteDatabase提供了方法:
- rawQuery (String sql, String[] selectionArgs):该方法返回 Cursor类的对象,用于操作查询的结果。
String sql = "select * from user";
Cursor cursor = db.rawQuery(sql, null);
cursor.moveToFirst();//转移到结果的第一行
while(!cursor.isAfterLast()){
String name=cursor.getString(cursor.getColumnIndex("name"));
String passwords=cursor.getString(cursor.getColumnIndex("passwords"));
Log.d("data", "name=" + name + " password=" + passwords);
cursor.moveToNext();
}
(2)使用SQLiteDatabase内定方法查询:
- query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit):这个方法有N多个参数啊……String table是操作的数据表的名称;String selection是筛选的字段选项;String[] selectionArgs是字段选项对应的值;String groupBy是筛选结果的分组依据;String having是在由groupBy子句创建的分组上设置条件;String orderBy是结果的排序方式,String limit是筛选结果的显示限制,例如“2, 3”是指从筛选结果的第2个开始显示3个。
Cursor cursor=db.query("user", null, null, null, null,null, " id desc", "2,3");//limit语句 offset, num
cursor.moveToFirst();//转移到结果的第一行
while(!cursor.isAfterLast()){
String name=cursor.getString(cursor.getColumnIndex("name"));
String passwords=cursor.getString(cursor.getColumnIndex("passwords"));
Log.d("data", " name=" + name + " password=" + passwords);
cursor.moveToNext();
}
这样数据库的操作和存储就差不多了哦,对于数据库的操作也就无非是这四种……
Android中数据存储(三)——SQLite数据库存储数据的更多相关文章
- Android 数据存储之 SQLite数据库存储
----------------------------------------SQLite数据库---------------------------------------------- SQLi ...
- Android中多表的SQLite数据库(译)
原文: Android SQLite Database with Multiple Tables 在上一篇教程Android SQLite Database Tutorial中,解释了如何在你的And ...
- Android中使用LitePal操控SQLite数据库
<第一行代码>读书手札 (一)什么是LitePal数据库 LitePal数据库是安卓的一个开源库,我们在以后的开发中,将会遇到许许多多的开源库,感谢开源社 区:因为开源社区的存在,一些我们 ...
- 在Android中查看和管理sqlite数据库
在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databas ...
- <Android基础> (六) 数据存储 Part 3 SQLite数据库存储
6.4 SQLite数据库存储 SQLite是一种轻量级的关系型数据库,运算速度快,占用资源少. 6.4.1 创建数据库 Android为了管理数据库,专门提供了SQLiteOpenHelper帮助类 ...
- Android学习之基础知识九 — 数据存储(持久化技术)之SQLite数据库存储
前面一讲介绍了数据持久化技术的前两种:文件存储.SharedPreferences存储.下面介绍第三种技术:SQLite数据库存储 一.SQLite数据库存储 SQLite数据库是一款轻量级的关系型数 ...
- Android数据存储之SQLite数据库
Android数据存储 之SQLite数据库简介 SQLite的相关知识,并结合Java实现对SQLite数据库的操作. SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎. ...
- Android数据存储之SQLite 数据库学习
Android提供了五种存取数据的方式 (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQLite数据库,存放各种数据, ...
- android开发之使用SQLite数据库存储
http://blog.csdn.net/jason0539/article/details/16360835 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且 ...
随机推荐
- GO-指针与函数
一.指针类型 1.普通类型,变量存的就是值,也叫值类型.指针类型存的是地址 2.获取变量的地址,用&,比如:var a int, 获取a的地址 &a 3.指针类型,变量存的是一个地址, ...
- linux内存分配方法总结【转】
转自:http://www.bkjia.com/Linuxjc/443717.html 内存映射结构: 1.32位地址线寻址4G的内存空间,其中0-3G为用户程序所独有,3G-4G为内核占有. 2.s ...
- elk系列6之tcp模块的使用【转】
preface tcp模块的使用场景如下: 有一台服务器A只需要收集一个日志,那么我们就可以不需要在这服务器上安装logstash,我们通过在其他logstash上启用tcp模块,监听某个端口,然后我 ...
- Linux 上配置 NTP SERVER
在CENTOS 6.2上面安装配置NTP SERVER 安装NTP:yum install ntp 配置时间源vi /etc/ntp.confserver 210.72.145.44server nt ...
- Java杂知识汇总(自己积累的)
[前提] 接下来,可能需要开始学习Java了,所以现在将前辈们传递给我的经验都记录下来,免得再次问他们. [积累] 1. 关于重启Tomcat服务器: 当在开发过程中, | 修改Java代码 -- 需 ...
- (二) Mysql 数据类型简介
第一节:整数类型.浮点数类型和定点数类型 1,整数类型 2,浮点数类型和定点数类型 M 表示:数据的总长度(不包括小数点): D 表示:小数位: 例如 decimal(5,2) 123.45 ...
- Python 2 到 Python 3 的变化
1: commands 被 subprocess 所取代:举例 Python2中使用getoutput: >>> import commands >>> print ...
- 洛谷 P1184高手之在一起 题解
题目传送门 那位高手是谁啊?@jxpxcsh QWQ. 这道题数据特别水,所以直接使用O(n*m),每读进一个m内的字符串,就扫一遍n的字符串.但注意地点字符串中有可能会有空格,所以这时候就要请出g ...
- 《构建高性能 Web站点》笔记
书名:构建高性能Web站点 出版社: 电子工业出版社 ISBN:9787121170935 一 绪论 等待的时间: (1) 数据在网络上的传输时间 (2) 站点服务器处理请求并生成回应数据的时间 ( ...
- 服务管理(svcadm)
svcs 正在运行的服务 svcs -a 正在运行和没运行的服务 svcs -D 此进程依赖的进程 svcs -D sendmail svcs -d 依赖于此进程的进程 svcs - ...