Android学习--10-数据存储

文件存储

经典的流操作

模式

  • MODE_PRIVATE 默认,写入的内容会覆盖原文件
  • MODE_APPEND 存在即追加
  • MODE_WORLD_READABLE 4.2已弃用,有安全隐患
  • MODE_WORLD_WRITEABLE 同上

写入

openFileOutput()

public void save() {
String data = "Data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

自动保存到 /data/data/<项目id>/files/

写出

openFileInput()

public String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}

SharedPreferences 存储

键值对形式存储,xml形式格式。

模式

  • MODE_PRIVATE 只有当前应用程序可以操作
  • MODE_MULTI_PROCESS 也是只能当前,适用于多进程
  • MODE_WORLD_READABLE 4.2后弃用
  • MODE_WORLD_WRITEABLE 4.2后弃用

getSharedPreferences(文件名,模式)

SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();

存地址 /data/data/<项目id>/shared_prefs /

SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);

###SQLite 数据库存储 你懂的。

public class MyDatabaseHelper extends SQLiteOpenHelper {
//接收参数:String name, 数据库名称  int version 用于更新版本
public MyDatabaseHelper(Context context, String name, CursorFactoryfactory, int version){}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql语句);
}
//只有在version 变大时才执行
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
MyDatabaseHelper dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
//这一步就创建数据库,和表结构了
SQLiteDatabase db = dbHelper.getWritableDatabase();

ContentValues values = new ContentValues();
values.put("name", "The Da Vinci Code");
values.put("author", "Dan Brown");
// C
db.insert("Book", null, values);
// U
db.update("Book", values, "name = ?", new String[] { "Tom" });
// D 
db.delete("Book", "name = ?", new String[] { "Tom" });
// R
//String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
Cursor cursor = db.query("Book", null, null, null, null, null, null);
while(cursor.moveToNext()){
	String name = cursor.getString(cursor.getColumnIndex("name"));
	int pages = cursor.getInt(cursor.getColumnIndex("pages"));
}
cursor.close();				    

当然你也可以自己写sql

db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)",
new String[] { "The Da Vinci Code", "Dan Brown", "454", "16.96" })

事务

db.beginTransaction(); // 开启事务

db.setTransactionSuccessful(); // 事务已经执行成功

db.endTransaction(); // 结束事务

跨程序取数据怎么办?

内容提供器( Content Provider) 下文学习

猜你喜欢

转载自my.oschina.net/u/2385255/blog/751596
今日推荐