3.Android开发指南—数据存储
Android系统提供了4种机制来保存和获取数据,系统偏好(Shared Preferences)、文件(Files)、SQLite数据库(Database)、网络(Network)
1.系统偏好:快速,轻量级的存储。是一个用来存放和提取元数据类型键-值对的轻量级机制。
代码: SharedPreferences pres = MainActivity.this.getSharedPreferences("kuka", Context.MODE_PRIVATE);
/*存储数据*/
Editor editor = pres.edit();
editor.putString("name", editName.getText().toString());
editor.putInt("age", Integer.valueOf(editAge.getText().toString()));
editor.commit();
/*获取数据*/
String name = pres.getString("name", "NO");
int age = pres.getInt("age", 0);
String bir = pres.getString("bir", "NO");
txtResult.setText("Name="+name+";age="+age+";bir="+bir);
2.文件:存储到设备内部或可移动内存。从文件中读取数据,可调用Context.openFileInput()方法并传递本地文件名和文件路径给它,该方法返回一个标准的
FileInputStream对象;向文件写数据时,可调用Context.openFileOutput()并传递文件名和路径,也返回FileOutputStream对象。
代码: /* 向文件写数据*/
OutputStream outStream = MainActivity.this.openFileOutput(fileName,Context.MODE_APPEND);
/*向文件读数据*/
InputStream inStream = MainActivity.this.openFileInput(fileName);
3.数据库:任意的结构化存储。Android API包含了对创建和使用SQLite数据库的支持。每个数据库都是创建它的应用程序所私有的。
SQLiteDatabase类提供一些方法操作数据库。这个类的对象可以通过继承了SQLiteOpenHelper类的类来得到。
代码:
public class DBOpenHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
private static final String DBNAME = "data.db";
public DBOpenHelper(Context context){
super(context, DBNAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)//创建表{
db.execSQL("create table t_student (sid integer primary key,name varchar(20),age integer)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
。。。。。。} }
---------------------------------------------------------------------------------------------------------------------------
DBOpenHelper helper=new DBOpenHelper(Context context);
SQLiteDatabase db=helper.getWritableDatabase();
第一种用法:1)db.execSQL("insert into t_student (sid,name,age) values (?,?,?)", new Object[]{ student.getSid(), student.getName
(), student.getAge() });//添加学生
2)db.execSQL("update t_student set name = ?,age = ? where sid = ?", new Object[]
{ student.getName(), student.getAge(), student.getSid() });//更新
3)Cursor cursor = db.rawQuery("select sid,name,age from t_student where sid = ?", new String[]
{ String.valueOf(sid) });//查询
if (cursor.moveToNext()){
return new Student(cursor.getInt(cursor.getColumnIndex("sid")), cursor.getString(cursor.getColumnIndex("name")),
cursor.getShort(cursor.getColumnIndex("age")));
}
4)db.execSQL("delete from t_student where sid in (" + sb + ")", (Object[]) sids);//删除
5)Cursor cursor = db.rawQuery("select * from t_student limit ?,?", new String[]{ String.valueOf(start), String.valueOf(count) });
//查询
while (cursor.moveToNext()){
students.add(new Student(cursor.getInt(cursor.getColumnIndex("sid")), cursor.getString(cursor.getColumnIndex
("name")), cursor.getShort(cursor.getColumnIndex("age"))));
}
第二种用法:1) ContentValues values=new ContentValues();values.put("sid", student.getSid());values.put("name", student.getName());
values.put("age", student.getAge());
db.insert("t_student", "sid", values);//添加
2) ContentValues values=new ContentValues();values.put("name", student.getName());values.put("age", student.getAge());
db.update("t_student", values, "sid = ?", new String[]{String.valueOf(student.getSid())});//更新
3)//db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)
Cursor cursor = db.query("student", new String[]{"sid","name"}, "sid=?", new String[]{String.valueOf(sid)}, null, null, null);
new Student(cursor.getInt(0), cursor.getString(1), cursor.getShort(2));//查询
4)db.delete("t_student", "sid in ("+sb+")", strPid);StringBuffer sb = new StringBuffer();String[] strPid=new String[sids.length];
4.网络:支持基于网络的存储