生活随笔
收集整理的這篇文章主要介紹了
安卓学习 之 数据存储(六)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、文件存儲(chǔ)
寫入文件
openFileOutput將數(shù)據(jù)存儲(chǔ)到指定的文件當(dāng)中去。第一個(gè)是文件名,第二個(gè)是文件的操作模式,MODE_PRIVATE為默認(rèn),會(huì)覆蓋之前內(nèi)容,MODE_APPEND會(huì)追加內(nèi)容。默認(rèn)存儲(chǔ)到/data/data/pacak name/file下獲得FileOutputStream對(duì)象,借助他構(gòu)建OutputStreamWriter對(duì)象,在構(gòu)建BufferedWriter對(duì)象,使用Java流方式將其寫到文件當(dāng)中去。輸入結(jié)束關(guān)閉輸入流。
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()}}
}
讀取文件
openFileInput獲得FileInputStream對(duì)象;借助上一步結(jié)果構(gòu)建InputStreamReader對(duì)象,在構(gòu)建BufferedReader對(duì)象,再一行行構(gòu)讀取文本中的所有內(nèi)容,存放至Stringbuilder對(duì)象中去。讀取并返回,關(guān)閉Reader流。關(guān)閉輸入流。
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存儲(chǔ)
將數(shù)據(jù)存儲(chǔ)至SharedPreferences中
使用三種方法獲得SharedPreferences對(duì)象,
- 第一種是Context 類中的 getSharedPreferences()方法,參數(shù)是文件名和指定的操作模式;
- 第二種Activity 類中的getPreferences(),只有一個(gè)參數(shù)操作模式;自動(dòng)將當(dāng)前活動(dòng)的類名作為 SharedPreferences 的文件名。
- 第三種是PreferenceManager 類中的 getDefaultSharedPreferences()方法
這是一個(gè)靜態(tài)方法,它接收一個(gè) Context 參數(shù),并自動(dòng)使用當(dāng)前應(yīng)用程序的包名作為前綴來(lái)命名。
SharedPreferences的edit方法獲取editor對(duì)象。在Editor對(duì)象中添加數(shù)據(jù),比如添加布爾類型putBoolean,添加字符串putString將添加的數(shù)據(jù)進(jìn)行提交commit()。
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();
從 SharedPreferences 中讀取數(shù)據(jù)
getSharedPreferences獲得sharedPreferences對(duì)象;etString、getInt獲得相應(yīng)數(shù)值,若沒有,則用后面的默認(rèn)值替代.
SharedPreferences pref = getSharedPreferences("data",
MODE_PRIVATE);
String name = pref.getString("name", "");
三、SQLite
輕量級(jí)關(guān)系型數(shù)據(jù)庫(kù),速度快,占用資源少,遵循數(shù)據(jù)庫(kù)ACID事務(wù)。
創(chuàng)建數(shù)據(jù)庫(kù)
創(chuàng)建MyDatabaseHelper繼承自SQLiteHelper,創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)句,將建表語(yǔ)句定義成字符串常量。
public class MyDatabaseHelper extends SQLiteOpenHelper{public static final String CREATE_BOOK = "create table Book("+"id integer primary key autoincrement,"+"author text,"+"price real,"+"pages integer,"+"name text)";
}
在onCreate調(diào)用SQLiteDatabase的execSQL執(zhí)行這條建表語(yǔ)句.
@Override
public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK);Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();
}
升級(jí)數(shù)據(jù)庫(kù)
在Book表基礎(chǔ)之上再添加Category表;如果在oncreate()方法直接添加,會(huì)因?yàn)锽ook表已經(jīng)存在而錯(cuò)誤。
在onUpgrade中增加兩條Drop語(yǔ)句,若存在則刪除該表,并轉(zhuǎn)而執(zhí)行onCreate方法;在onCreate方法中執(zhí)行創(chuàng)表語(yǔ)句;dbHelper = new
MyDatabaseHelper(this,“BookStore.db”,null,2);將版本號(hào)改為比1大的。就能夠觸發(fā)oncreate()方法。
數(shù)據(jù)庫(kù)操作
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
// 開始組裝第一條數(shù)據(jù)
values.put("name", "The Da Vinci Code");
values.put("author", "Dan Brown");
values.put("pages", 454);
values.put("price", 16.96);
db.insert("Book", null, values); // 插入第一條數(shù)據(jù)
第二個(gè)參數(shù)用于在未指定添加數(shù)據(jù)的情況下給某些可為空的列自動(dòng)賦值 NULL
SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price",10.99);
db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"});
第三個(gè)參數(shù)對(duì)應(yīng)SQL語(yǔ)句的where部分,表明更新所有name等于?的行,而?相當(dāng)于一個(gè)占位符,第四個(gè)參數(shù)為占位符指定的內(nèi)容。
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("Book","pages>?",new String[]{"500"});
較為復(fù)雜,總共七個(gè)參數(shù)
query()方法參數(shù)對(duì)應(yīng) SQL 部分描述
| table | from table_name | 指定查詢的表名 |
| columns | select column1, column2 | 指定查詢的列名 |
| selection | where column = value | 指定 where 的約束條件 |
| selectionArgs | - | 為 where 中的占位符提供具體的值 |
| groupBy | group by column | 指定需要 group by 的列 |
| having | having column = value | 對(duì) group by 后的結(jié)果進(jìn)一步約束 |
| orderBy | order by column1, column2 | 指定查詢結(jié)果的排序方式 |
db.query(“Book”,null…)查詢Book表中的所有數(shù)據(jù),并將數(shù)據(jù)以Cursor對(duì)象進(jìn)行返回。將數(shù)組指針通過moveToFirst移到第一行的位置。遍歷Cursor對(duì)象,取出數(shù)據(jù)并打印,通過getColumnIndex獲取某一列在表中對(duì)應(yīng)的位置索引,然后將這索引傳入到相應(yīng)的取值方法中,這樣便可以得到從數(shù)據(jù)庫(kù)中讀取到的數(shù)據(jù)了。Log輸出。moveToNext獲取下一條數(shù)據(jù)。調(diào)用Close方法來(lái)關(guān)閉Cursor流。
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 查詢Book表中所有的數(shù)據(jù)
Cursor cursor = db.query("Book", null, null, null, null, null, null);
if (cursor.moveToFirst()) {do {// 遍歷Cursor對(duì)象,取出數(shù)據(jù)并打印String name = cursor.getString(cursor. getColumnIndex("name"));String author = cursor.getString(cursor. getColumnIndex("author"));int pages = cursor.getInt(cursor.getColumnIndex("pages"));double price = cursor.getDouble(cursor.getColumnIndex("price"));Log.d("MainActivity", "book name is " + name); Log.d("MainActivity", "book author is " + author); Log.d("MainActivity", "book pages is " + pages); Log.d("MainActivity", "book price is " + price);} while (cursor.moveToNext());
}
cursor.close();
總結(jié)
以上是生活随笔為你收集整理的安卓学习 之 数据存储(六)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。