实现数据存储的三种方式:
文件存储
SharedPreference存储
SQLite数据库存储
有关三种方式的数据所在的位置:
下面重点讲解三种不同的存储
- 文件存储
主要分为内部存储、外部存储。
**内存存储:**使用了FileInputStream类中的openFileInput()方法,用于读取数据;使用了FileOutputStream类中的openFileOutput()方法,用于写入数据。
外部存储:使用Enviroment类中的getExternalStorageDirectory()方法对外部存储上的文件进行读写。
总之:
FileOutputStream -> openFileOutput()
FileInputStream -> openFileInput()
Environment -> getExternalStorageDirectory()
内部存储的写入文件步骤
第一
获取文件输出流对象 FileOutputStream
第二
使用FileOutputStream类的openFileOutput(String name, int mode)方法
第三
调用FileOutputStream对象的write()方法写入文件
第四
调用flush()方法,因为write()方法是写入缓冲区的,调用flush()方法将缓冲中的数据写入到文件,清空缓存
第五
close()方法用于关闭FileOutputStream
SharedPreferences存储
SharedPreferences是一种数据存储方式,用来存储一些简单的信息,位于android.content包中,以键值对的模式进行存储,键值对(key-value)。
其中获取的方式包括:使用getSharedPreferences()方式,使用getPreferences()方式获取。
实现 SharedPreferences存储步骤:
第一
调用 SharedPreferences类的edit()方法,获取 SharedPreferences.Editor对象
第二
调用一个 SharedPreferences.Editor对象的putXXX的方法获取数据
第三
使用commit()方法提交数据
SQLite数据库存储
SQLite是一款轻量级的关系型数据库,它的运算很快,占用空间小,不仅有SQL语法支持,独立,还有数据库的ACID事务,SQLite数据库为一种嵌入式数据库。
其中,它是QLiteDatabase的帮助类,用于管理数据库的创建和升级,SQLiteOpenHelper类为抽象类,有两个要重写的方法:onCreate()和onUpgrade(),用于去实现创建和升级数据库。
1.创建一个继承自SQLiteOpenHelper类
二.实现对数据的增删改查操作
增加数据
- 使用ContentValues的put()方法以键值对的形式存储基本类型数,可以理解为键就是表中属性名,值就是表中数据。还常用方法clear()清空所有数据。
- SQLiteDatabase用于增添数据的辅助性方法insert(),三个参数含义(被操作的表名,空值字段的名称,数据即ContentValues对象),第二个参数一般传入null。
删除数据
- SQLiteDatabase用于删除数据的辅助性方法delete(),第一个参数表示表名,第二第三个参数用于约束删除某一行或几行的数据。
修改数据库
- SQLiteDatabase用于修改数据的辅助性方法update() ,提供四个参数(表名,ContentValues对象,约束,约束)
查询数据库
- SQLiteDatabase用于查询数据的辅助性方法quary(),需要至少七个参数(table, columns, selection,
selectionArgs, groupBy, having,
orderBy)(表名,要查询出的列名,查询条件子句,对应于selection语句中占位符的值,要分组的列名,分组后过滤条件,排序方式),多数情况下少数几个参数就能完成查询操作了。这个方法会返回一个Cursor,查询到的数据都会从它取出。 - Cursor常用方法:
moveToFirst():将指针移动到结果集的第一行; getColumnIndex():获取某一列在表中对应位置的索引;
close():关闭指针。 move(int offset):以当前位置为参考,移动到指定行 moveToLast():移动到最后一行
moveToPosition(int position):移动到指定行 moveToPrevious():移动到前一行
moveToNext():移动到下一行 isFirst():是否指向第一条 isLast():是否指向最后一条
isBeforeFirst():/是否指向第一条之前 isAfterLast():是否指向最后一条之后 isNull(int
columnIndex):指定列是否为空(列基数为0) isClosed():游标是否已关闭 getCount():总数据项数
getPosition():返回当前游标所指向的行数 getString(int columnIndex):返回当前行指定列的值
相关查询代码
Cursor cursor = db.rawQuery("select * from userInfo", null);
while (cursor.moveToNext()) {
String _id = cursor.getString(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
String sex = cursor.getString(cursor.getColumnIndex("sex"));
}
cursor.close();