日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

安卓学习 之 数据存储(六)

發(fā)布時(shí)間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓学习 之 数据存储(六) 小編覺得挺不錯(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ù)操作

    • 添加數(shù)據(jù)
    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

    • 更新數(shù)據(jù)
    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)容。

    • 刪除數(shù)據(jù)
    SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("Book","pages>?",new String[]{"500"});
    • 查詢數(shù)據(jù)

    較為復(fù)雜,總共七個(gè)參數(shù)

    query()方法參數(shù)對(duì)應(yīng) SQL 部分描述
    tablefrom table_name指定查詢的表名
    columnsselect column1, column2指定查詢的列名
    selectionwhere column = value指定 where 的約束條件
    selectionArgs-為 where 中的占位符提供具體的值
    groupBygroup by column指定需要 group by 的列
    havinghaving column = value對(duì) group by 后的結(jié)果進(jìn)一步約束
    orderByorder 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ò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: av怡红院 | 日本免费黄色网址 | jlzzzjlzzz国产免费观看 | 自拍偷拍视频在线观看 | 国模杨依粉嫩蝴蝶150p | 国产婷婷一区二区三区 | 可以免费看污视频的网站 | 91视频成人| 国产毛片久久 | 日韩r级电影在线观看 | 男生和女生操操 | 成人网免费 | 久久久人妻无码一区二区 | 激情网站在线观看 | 日日弄天天弄美女bbbb | 琪琪色影音先锋 | 国产视频一区在线 | 久久激情小说 | 国产欧美综合在线 | 人人爽人人做 | 看毛片看毛片 | 伊人99| 91精品国产电影 | 午夜xxxxx | 特级西西444www大精品视频 | 中文字幕久久久 | 亚洲经典在线观看 | 一区二区三区高清在线 | 久久久人妻无码一区二区 | 无遮挡国产 | 午夜视频福利在线 | 理论片琪琪午夜电影 | 性欧美又大又长又硬 | xxxxxx日本 | 成人在线免费观看网址 | 永久黄网站色视频免费观看w | 国产九九热 | www.国产.com| 一区二区三区国产av | 波多野在线 | 天天做天天射 | 自拍天堂| 一区一区三区产品乱码 | 曰韩毛片 | 久色精品视频 | 国产精品久久久久久久久毛片 | 超碰在线观看免费 | 国产精品日韩欧美 | 欧美精品 日韩 | 午夜xxx| 在线天堂6 | 色噜噜狠狠一区二区 | 日韩欧美色图 | 自拍偷拍日韩精品 | 国产精品av网站 | 国产毛片久久久久久国产毛片 | aa黄色大片 | 懂色一区二区三区免费观看 | 亚洲欧洲综合 | 色综合视频网 | 天堂а√在线最新版中文在线 | 中文字幕亚洲在线观看 | 亚洲不卡中文字幕无码 | 成人无码精品1区2区3区免费看 | 成年人激情网站 | 亚洲另类在线观看 | 国产精品久久久久影院色老大 | 夜夜操av | 日韩性网 | 欧美亚洲综合网 | 精品嫩模一区二区三区 | 国产成人中文字幕 | 国产美女永久无遮挡 | 2024av| yy4138理论片动漫理论片 | 老熟妇精品一区二区三区 | 伊人青青 | 老头巨大又粗又长xxxxx | 女人高潮特级毛片 | 有码一区二区三区 | 嫩草99 | av播放在线 | 欧美激情视频一区二区 | 97久久久久久久久久 | 成人在线播放网站 | 欧美午夜在线视频 | 午夜精品久久久久久久蜜桃 | 欧美日韩国产一区二区三区 | 免费a在线观看播放 | 色婷婷六月| 欧美精品在线视频观看 | 污污视频网站 | 色人阁网站 | 男人女人拔萝卜视频 | 亚洲一区 视频 | 天天干天天做 | www视频在线观看网站 | 日韩欧美国产一区二区三区 | 自拍偷拍 国产 |