安卓数据存储五种方式
数据存储:
五种:
Shared Preferences 参数共享
Internal Storage 内部存储
External Storage 外部存储 (sdcard)
SQLite Databases 数据库存储
Network Connection 网络存储
1、Shared Preferences 参数共享
应用场景:应用程序有少量的数据需要保持(保持设置的参数)
文件保持位置:/data/data/包名/shared_prefs/xxx.xml
文件格式:xml
保持数据:
//参数是操作模式,0代表着私有的MODE_PRIVATE。
SharedPreferences sp = getPreferences(MODE_PRIVATE);
Editor edit = sp.edit();//获取一个编辑器
edit.putBoolean("boolean", true);
edit.putString("key", "sadfsdf");
edit.putInt("int", 123);
edit.commit();//提交修改
读取数据:
SharedPreferences sp = getPreferences(MODE_PRIVATE);
boolean boolean1 = sp.getBoolean("boolean", false);
int int1 = sp.getInt("int", 0);
String string = sp.getString("key", "");
它的操作模式一般都是MODE_PRIVATE;
SharedPreferences sp = getSharedPreferences("yinan", MODE_PRIVATE);
2、internalstorage 内部存储
文件保持的位置:/data/data/包名/files/xxx.xxx
文件格式:自定义
保持数据:
fos = openFileOutput("yinan.txt", MODE_APPEND);
String str = "uiouioasdffkmgh";
fos.write(str.getBytes());
读取数据:
fis = openFileInput("yinan.txt");
操作(读写)模式:
MODE_PRIVATE 当前应用才有权限读写。数据会覆盖。
MODE_APPEND 当前应用才有权限读写。数据可追加
MODE_WORLD_READABLE 其他应用可读。
MODE_WORLD_WRITEABLE 其他应用可写
读取其他应用的数据:
fis = new FileInputStream("data/data/com.example.ex00_android/files/yinan.txt");
是否能读取的到时有文件的读取模式决定的。
3、External Storage 外部存储
sdcard的读写;
// "/mnt/sdcard"
//获取sdcard路径
File filename =
Environment.getExternalStorageDirectory();
//sdcard的状态
if(Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED))
{
//判断sdcard的空间是否足够
long freeSpace = filename.getFreeSpace();
}
else
{
}
4、 SQLite Databases 数据库存储
android平台上,集成了一个嵌入式关系型数据库--SQLite
免费的
轻量级
多线程
跨平台
SQLite 可以解析大部分标准的SQL语句:
创建表:
CREATE TABLE 表名(id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(20))
例:CREATE TABLE student (studentid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(50),phone VARCHAR(20))
删除表:
DROP TABLE 表名
例:DROP TABLE student
更新表:
ALTER TABLE 表名 ADD 字段名 属性
例:"ALTER TABLE student ADD COLUMN age INTEGER"
查询语句:
select * from 表名 where 条件语句 group by 分组语句 having 分组条件 order by 排序语句
例:SELECT phone, name FROM student ORDER BY name DESC
插入语句
insert into 表名(字段名) values (值)
例:INSERT INTO student (name, phone) VALUES(“test”, “13666666666”)
更新语句
updata 表名 set 字段名 = 值 where 条件语句
例:UPDATE student SET phone=1399999999 WHERE name=“test”
删除语句:
delete from 表名 where 条件语句
例:DELETE FROM student WHERE name=“test”
SQLiteOpenHelper
步骤:
1、创建一个类继承SQLiteOpenHelper
2、需要一个构造方法;
参数可以自己选择(但是super里面参数必须要有)
public MySQLiteHelper(Context context,int version)
{
super(context, "yinan.db", null, version);
}
调用:在activity的合适的时机(一般就是在onCreate()方法)
MySQLiteHelper mHelper = new MySQLiteHelper(this, 1);
SQLiteDatabase mDB = mHelper.getWritableDatabase();//只要调用getWritableDatabase跟getReadableDatabase方法就可以获得数据库
注意:
当我们创建MySQLiteHelper对象的时候:
a、数据库不存在的时候就自动创建数据库,并且调用MySQLiteHelper类里面的onCreate();
所以我们就可以在onCreate执行创建表语句
b、如果数据库已经存在了就不会再调用onCreate
c、如果数据库存在,但是版本号不一样的话就会调用onUpgrade()方法(更新表)