数据存储:
五种:
Shared Preferences 参数共享
Internal Storage 内部存储
External Storage 外部存储(sdcard)
SQLite Databases 数据库存储
Network Connection 网络存储
1、Shared Preferences 参数共享
应用场景:应用程序有少量数据需要保存的话(保存应用程序设置的一些参数)
文件保存位置:/data/data/包名/shared_prefs/xxx.xml
保存数据:
SharedPreferences sp = getPreferences(MODE_PRIVATE);//参数是操作模式,MODE_PRIVATE是私有的
Editor edit = sp.edit(); //得到一个编辑器
edit.putString("str", "jhgasdhasd");
edit.putBoolean("boolean", false);
edit.putInt("int", 1);
edit.commit(); //提交修改
数据读取:
SharedPreferences sp = getPreferences(MODE_PRIVATE);
String string = sp.getString("str", null);
boolean boolean1 = sp.getBoolean("boolean", false);
int int1 = sp.getInt("int", 0);
它的操作模式一般都是MODE_PRIVATE(只能应用本身才能读取修改这个文件)
//自定义要保存数据的文件名
SharedPreferences sp = getSharedPreferences("yinan", MODE_PRIVATE);
2、Internal Storage 内部存储
文件保存位置:/data/data/包名/files/xxx.xxx
文件格式:自定义
保存数据:
FileOutputStream fos = null;
try {
fos = openFileOutput("yinan.txt", MODE_PRIVATE);
String str = "sdfsfgsdfgsd";
fos.write(str.getBytes());
} catch (FileNotFoundException e) {
数据读取:
FileInputStream fis = null;
try {
fis = openFileInput("yinan.txt");
ByteArrayBuffer arrayBuffer = new ByteArrayBuffer(4000);
int len = 0;
byte[] buffer = new byte[1024];
while ((len = fis.read(buffer)) != -1) {
arrayBuffer.append(buffer, 0, len);
}
操作(读写模式)模式
MODE_PRIVATE 当前应用才有权限读写。数据会覆盖的。
MODE_APPEND 当前应用才有权限读写。这个数据可以追加。
MODE_WORLD_READABLE 其他应用可读。
MODE_WORLD_WRITEABLE 其他应用可写。
3、External Storage 外部存储(sdcard)
路径:
2.1之前:/sdcard
2.2之后:/mnt/sdcard
//获取sdcard的路径
File file = Environment.getExternalStorageDirectory();
//判断sdcard状态
if(Environment.MEDIA_MOUNTED.
equals(Environment.getExternalStorageState()))
{
//获取sdcard的可用空间
long freeSpace = file.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')
更新语句:
update 表名 set 字段名 = 值 where 条件语句
例如:UPDATE student SET phone=1399999999 WHERE name='test'
删除语句:
delete from 表名 where 条件语句
例如:DELETE FROM student WHERE name='test'
Android里面操作SQLite的步骤:
1、创建一个类,去继承SQLiteOpenHelper
2、实现两个方法。新增一个有参的构造方法
public MySQLiteOpenHelper(Context context, int version) {
super(context, "yinan.db", null, version);
}
//参数个数是自定义的。只要在super()里面有传数据就不需要外部再传
//当数据库不存在的时候,调用这个辅助类的时候会自动创建,并调用onCreate();
//如果数据存在onCreate方法就不会被调用。
//如果数据存在,但是版本号不一样的话onUpgrade()就会被调用。
3、自动创建表:
根据onCreate方法的特性,
当数据库不存在的时候,创建数据库的同时把表一起创建。
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE student (studentid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(50),phone VARCHAR(20))";
db.execSQL(sql );
}
4、在Activity中创建这个辅助类的对象。
对象.getWritableDatabase();
对象.getReadableDatabase();
这个两个方法任意一个就可以得到数据库对象。
数据库对象.execSQL(sql语句)
查询:
private void select() {
arrayList.clear();
String sql = "SELECT phone, name FROM student ORDER BY name DESC";
Cursor cursor = mDB.rawQuery(sql, null);
boolean haseData = cursor.moveToFirst();
while(haseData)//如果有数据就继续循环
{
//获取每次读取游标里面的数据
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
//把数据封装起来
Student student = new Student(name, phone);
arrayList.add(student);
//让游标读取下一个数
haseData = cursor.moveToNext();
}
mTextView.setText(arrayList.toString());
}