Android 資料儲存讀取 持久化問題

2021-10-06 14:10:27 字數 4667 閱讀 1731

閱讀《第一行**》筆記

一. 文字操作

使用context. openfileoutput輸出資料到文字,使用context.openfileinput讀取文字。

fileoutputstream out = null; 

bufferedwriter writer = null;

try catch (ioexception e) finally

} catch (ioexception e)

}

fileinputstream in = null; 

bufferedreader reader = null;

stringbuilder content = new stringbuilder();

try

} catch (ioexception e) finally catch (ioexception e)

} //content就是最後讀取的資料

二.sharedpreferences

sharedpreferences是使用鍵值對的方式來儲存資料的。

sharedpreferences 檔案都是存放在/data/data//shared_prefs/目錄下

context.getsharedpreferences()

activity類的 getpreferences()

preferencemanager類中的 getdefaultsharedpreferences()方法

向sharedpreferences中存入資料

sharedpreferences.editor editor=getsharedpreferences("data", mode_private).edit(); editor.putstring("name", "tom"); 

editor.putint("age", 28);

editor.putboolean("married", false);

editor.commit();

從sharedpreferences中讀取資料

sharedpreferences pref = getsharedpreferences("data",mode_private);

string name = pref.getstring("name", "");

int age = pref.getint("age", 0);

boolean married = pref.getboolean("married", false);

三. sqlite資料庫讀取

資料庫檔案會存放在/data/data//databases/目錄下

建立databasehelper,google要求使用sqliteopenhelper來管理sqlite資料庫,sqliteopenhelper是乙個抽象類,有兩個抽象方法,分別是 oncreate()和 onupgrade()。 getreadabledatabase() 和 getwritabledatabase()。這兩個方法都可以建立或開啟乙個現有的資料庫(如果資料庫已存在 則直接開啟,否則建立乙個新的資料庫),並返回乙個可對資料庫進行讀寫操作的物件。不 同的是,當資料庫不可寫入的時候(如磁碟空間已滿)getreadabledatabase()方法返回的對 象將以唯讀的方式去開啟資料庫,而 getwritabledatabase()方法則將出現異常。

public class mydatabasehelper extends sqliteopenhelper  

@override

public void oncreate(sqlitedatabase db)

@override

public void onupgrade(sqlitedatabase db, int oldversion, int newversion)

}

通過sqliteopenhelper可以獲取到資料庫的讀寫許可權。

mydatabasehelper dbhelper = new mydatabasehelper(this, "bookstore.db", null, 1); 

dbhelper.getwritabledatabase();

當乙個應用新建了乙個資料庫後,資料庫中也存在表時sqliteopenhelper將不會再去呼叫oncreate方法,如果已經新建了資料庫,但是想刪除資料庫重新建乙個的話,可以呼叫onupgrade

@override public void onupgrade(sqlitedatabase db, int oldversion, int newversion)
/*2是資料庫版本號,如果第一次傳入的是1,第二次傳入2的話,相當於版本更新了,sqliteopenhelper就會執行onupgrade

*/dbhelper = new mydatabasehelper(this, "bookstore.db", null, 2);

dbhelper.getwritabledatabase();

如果第一次建立了book表,第二次想建立category表,則可以直接在onupgrade中加入建立category表的命令,如下:

public static final string create_category = "create table category (" + "id integer primary key autoincrement, " + "category_name text, " + "category_code integer)";

@override

public void onupgrade(sqlitedatabase db, int oldversion, int newversion)

//執行以下**

mysqliteopenhelper = new mysqliteopenhelper(this,"sqlitedemo.db",null,2); //版本號高於1

mysqliteopenhelper.getwritabledatabase();

結果如下:

補充:如果想手動檢視sqlite資料庫的話,可以按如下步驟

1. root手機

2. 不進入adb shell

3. adb pull /data/data/程式包名/databases/資料庫名稱.db 電腦需要存放的路徑

4. 使用可以檢視db檔案的軟體直接開啟,如sqlitespy

想檢視手機中新建的資料庫檔案的話

1. adb shell

2. cd /data/data/程式包名/databases/

3. ls 檢視

//使用sql語句操作sqlite資料庫

db.execsql("insertintobook(name,author,pages,price)values(?,?,?,?)", new string ); db.execsql("insertintobook(name,author,pages,price)values(?,?,?,?)", newstring );

更新資料的方法如下:

db.execsql("updatebooksetprice=? wherename=?",new string); 刪除資料的方法如下:

db.execsql("delete from book where pages > ?", new string );

查詢資料的方法如下:

db.rawquery("select * from book", null);

sqlite資料庫事物處理,如果事物處理成功則db.settransactionsuccessful(); ,如果事物處理失敗,db.endtransaction();此時,事物之間的所有操作取消。

sqlitedatabase db = dbhelper.getwritabledatabase(); 

db.begintransaction();

// 開啟事務

try

contentvalues values = new contentvalues();

values.put("name", "game of thrones");

values.put("author", "george martin");

values.put("pages", 720);

values.put("price", 20.85);

db.insert("book", null, values);

db.settransactionsuccessful(); // 事務已經執行成功

} catch (exception e) finally

Android 應用資料持久儲存

1 應用的資料到底有幾種儲存方式?2 應用的資料到底儲存在那幾個地方?對應乙個應用來說,檔案和資料 到底可以儲存在 file 儲存 openfileinput 對應目錄為 data data files sharedpreference 儲存 操作方式 對應目錄 data data pref 代表的...

android中資料儲存全方案 持久化技術

資料持久化 將那些記憶體中的瞬時資料儲存到儲存裝置中,保證即使在手機或平板關機的情況下,這些資料仍不會丟失。儲存在記憶體中的資料是處於瞬時狀態的,而儲存在儲存裝置中的資料是處於持久狀態的,持久化技術則提供了一種機制可以讓資料在瞬時狀態和持久狀態之間相互轉化。android中主要提供了3種方式實現資料...

資料的持久化儲存

對於乙個程式,就像乙個計算機的縮影,程式又輸入 輸出 資料儲存 執行 資料的處理 其中,資料的儲存在程式中占有相當大的比例和作用。在程式的執行過程中,可以把程式中的資料分為,全域性 區域性 靜態 常數等不同的資料狀態,同時把資料型別分為 整形 字元型別 浮點型 字串等等,資料存放在記憶體佇列 堆疊 ...