1. 程式人生 > >android 摘要----資料儲存全方案,詳解持久化技術

android 摘要----資料儲存全方案,詳解持久化技術

資料持久化:
        只將那些記憶體中的瞬時資料儲存到儲存裝置中,保證即使在手機或電腦關機的情況下,這些資料也不會丟失。


1,檔案儲存:
            是android中最基本的一種資料儲存方式,不對儲存內容進行任何格式化處理,所有詩句原封不動的儲存到檔案當中,適合儲存一些簡單的文字資料或二進位制資料。


            下面是一段程式碼,展示如何將一段文字內容儲存到檔案中:
                            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();
                                                }
                                        }
                                 }


從檔案中讀取資料,程式碼如下:
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 (FileNotFoundException e) {
        e.printStackTrace();
} catch (IOException e) {
        e.printStackTrace();
} finally {
if(reader != null){
try {
                reader.close();
} catch (IOException e) {
                e.printStackTrace();
}
        }
    }
return content.toString();
}




2, SharedPreferences 儲存


 儲存方式:
            通過鍵值對的方式進行儲存資料。


(1)得到SharedPreferences物件的方法:
                1):Context 類中的getSharedPreferences()方法:
                                此方法接受兩個引數,第一個引數用於指定SharedPrerences 檔案的名稱,如果指定的檔案不存在則會建立一個。第二個引數用於指定操作模式,主要有兩種模式可以選擇,MODE_PRIVATE和MODE_MULTI_PROCESS。前者是預設操作模式,和直接傳入0效果一樣,表示只有當前的應用程式才可以對這個SharedPreferences檔案進行讀寫。後者一般是用於會有多個程序中對同一個SharedPreferences檔案進行讀寫的情況。


                2):Activity類中的getPreferences()方法
                        


                3):PreferenceManager類中的getDefaultSharedPreference()方法
                                    這是一個靜態方法,接受一個Context引數,並自動使用當前應用程式的包名作為字首來命名SharedPreferences檔案




   得到SharedPreferences物件後,就可以開始儲存資料,主要步驟如下:
            1,呼叫SharedPreferences 物件的edit()方法來獲取一個SharedPreference.Editor物件。
            2,向 SharedPreferences.Editor 物件中新增資料,putBoolean()、putString()方法等,以此類推。
            3,呼叫commit()方法將新增的資料提交,從而完成資料儲存操作。
public void onClick(View view) {
    SharedPreferences.Editor editor =
            getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","Tom");
editor.putInt("age",28);
editor.putBoolean("married",false);
editor.commit();
}
讀取資料:
public void onClick(View view) {
    SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name","");
    int age = pref.getInt("age",0);
    boolean married = pref.getBoolean("married",false);
Log.d("MainActivity","name is "+ name);
Log.d("MainActivity","age is " + age);
Log.d("MainActivity","married is " + married);
}




3,建立資料庫
        SQLiteOpenHelper 類,藉助這個類可以對資料庫進行建立和升級。
        SQLiteOpenHelper 是抽象類,要建立自己的幫助類去繼承它。
        SQLiteOpenHelper兩個重要的例項方法:getReadableDatabase()和getWritableDatabase().這兩個方法都可以建立或者開啟一個現有的資料庫,並返回一個可對資料庫進行讀寫操作的物件。


 4,升級資料庫
        呼叫SQLiteOpenHelper內的onUpgrade()方法實現升級




5,使用事務


        事務:
                就是把許多事情當成一件事來處理。可以理解為同一條繩上的螞蚱。
        
        有點:
                。在android應用開發中,經常會遇到需要進行資料庫操作的時候,Android中進行資料庫操作是非常慢的(尤其是寫操作),打包成事務能夠有效地提高效率。
                。保證資料的一致性,有關事務的操作全部完成後才提交(生效),否則就進行事務的回滾操作。


        SQLiteDatabase db = dbHelper.getWritableDatabase();
        
        db.beginTransaction()   //開啟事務
        
        db.endTransaction()     //結束事務