数据存储:

五种:

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());

}