《Android基礎(chǔ)》------2.存儲方式

Android的數(shù)據(jù)存儲方式

前言:隨著Android的興起娃惯,Android為更多的開發(fā)者所青睞皆撩,隨之伴隨著一些問題捍壤。有開發(fā)平臺不同槽畔,個體中問題處理方法也是不同的洪灯,今天我們來講解一下Android的這五種數(shù)據(jù)存儲方式,一來方便自己查閱竟痰、復(fù)習(xí)和鞏固基石签钩,而來也能解開大家心中 的疑惑,OK坏快,讓我們走起铅檩!

常識知識普及:

RAM :內(nèi)存 運行內(nèi)存
ROM : 內(nèi)部存儲空間 相當(dāng)于固態(tài)硬盤
SD卡 : 外部存儲卡


1)內(nèi)部存儲

-cache : 存儲臨時數(shù)據(jù)(當(dāng)系統(tǒng)容量不足時會自動刪除文件夾中的數(shù)據(jù))
this.getCacheDir();能夠獲取cache的文件夾路徑

-files : Android系統(tǒng)不會刪除這個目錄下的文件
this.getFilesDir();能夠獲取files文件夾路徑
//獲取files目錄下的savedata.text文件的輸出流(寫入)
openFileOutput("savedata.txt",0);
//獲取files目錄下的savedata.text文件的輸入流(讀取)
openFileInput("savedata.txt");

-路徑 : /data/data/包名。莽鸿。昧旨。/


2)外部存儲

-路徑 : /mnt/sdcard/

-獲取路徑系統(tǒng)API
//無論任何Android廠商獲取的都是sd卡的地址
File file = Environment.getExternalStorageDirectory();
String filePath = filess.getAbsolutePath();

-獲取SD卡的狀態(tài)
String sdCardState = Environment.getExternalStorageState();
if(sdCardState.equals(Environment.MEDIA_MOUNTED)){
Toast.makeText(this, "sd卡已插入", 0).show();
}else if(sdCardState.equals(Environment.MEDIA_UNMOUNTED)) {
Toast.makeText(this, "sd卡拔出", 0).show();
}

-獲取SD卡可用空間大小
File file = Environment.getExternalStorageDirectory();
//獲取可用空間大小 byte類型
long freeSpace = filess.getFreeSpace();
//格式化空間大小 B KB MB GB TB
String formatFileSize = Formatter.formatFileSize(this, freeSpace);


3)SharedPrefrence存儲

-路徑 : /data/data/包名/shared_prefs/
-應(yīng)用場景 : 用來存儲配置信息
-存儲
1)初始化SharedPreferences對象 "config"表示存儲的文件名
SharedPreferences sp = getSharedPreferences("config", 0);//初始化sp對象

>2)拿到編輯器
    Editor edit = sp.edit();

>3)存儲數(shù)據(jù)
    edit.putBoolean("status", status);//第一個參數(shù)是狀態(tài)名  第二個參數(shù)是狀態(tài)值

>4)提交(重要)
    edit.commit();
    
>-**讀取**        :
    sp.getBoolean("status", false);//第一個參數(shù)是狀態(tài)名  第二個參數(shù)是默認(rèn)值

  > **注意:保存的時候會自動添加后綴名 .xml (config.xml)**

4)網(wǎng)絡(luò)存儲(重要)

應(yīng)用場景:比如頭像拾给、價格。兔沃。蒋得。都會存儲在網(wǎng)絡(luò)服務(wù)器之上
網(wǎng)絡(luò)存儲比較重要也相對復(fù)雜會單獨用一章進行講解


5)數(shù)據(jù)庫存儲(重要)

《Android基礎(chǔ)》------3.SqLite數(shù)據(jù)庫的使用詳解

Sqlite數(shù)據(jù)庫

  • 開源的
  • 輕量的
  • sql的增刪改查語句和mysql很像

數(shù)據(jù)庫的創(chuàng)建

  • java在硬盤上創(chuàng)建文件 :
  //在內(nèi)存中創(chuàng)建指向D盤的文件對象
    File file=new File("D://data.txt");
    //用file對象在硬盤上創(chuàng)建一個文件
    FileOutputStream fos=new FileOutputStream(file);
    fos.write("hello".getBytes());
    fos.close();
  • **Android在手機上創(chuàng)建數(shù)據(jù)庫文件** :
    
      1)在內(nèi)存中創(chuàng)建數(shù)據(jù)庫幫助類對象
        2)用數(shù)據(jù)庫對象去創(chuàng)建文件
        路徑:/data/data/包名/databases/
  • 第一次創(chuàng)建數(shù)據(jù)庫的時候會調(diào)用 onCreate();
    這方法值調(diào)用一次 比較適合用于創(chuàng)建收庫的表
    // 創(chuàng)建數(shù)據(jù)庫的表
    db.execSQL("create table stu(_id integer primary key autoincrement,name varcher(20),num varcher(20))");
  • //在升級的時候修改表 onUpgrade();
    db.execSQL("alter table stu add stopdate varcher(20)");
  • 數(shù)據(jù)庫升級(注意事項)
    數(shù)據(jù)庫的版本升級時調(diào)用
    version遞增 不能降級

數(shù)據(jù)庫的創(chuàng)建:

//在內(nèi)存中創(chuàng)建數(shù)據(jù)庫對象 使用數(shù)據(jù)庫幫助類進行創(chuàng)建
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//創(chuàng)建一個可寫入的數(shù)據(jù)庫
dbHelper.getWritableDatabase();

數(shù)據(jù)庫幫助類:

package yingxininfo.net.netidcard.data;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class MyDbOpenHelper extends SQLiteOpenHelper {

private static final String Tag = "MyDbOpenHelper";

 /**
 * 
 * @param context
 *            上下文
 * @param name
 *            數(shù)據(jù)庫名稱
 * @param factory
 *            游標(biāo)(null用默認(rèn)的游標(biāo)工廠)
 * @param version
 *            數(shù)據(jù)庫版本 >=1的整數(shù)
 */
public MyDbOpenHelper(Context context) {
    super(context, "student.db", null, 1);
    // TODO Auto-generated constructor stub
    Log.i(Tag, "數(shù)據(jù)庫幫助類對象創(chuàng)建");
}

/**
 * 只在第一次創(chuàng)建數(shù)據(jù)庫的時候調(diào)用 
 * 比較適合用來創(chuàng)建數(shù)據(jù)庫的表
 */
@Override
public void onCreate(SQLiteDatabase db) {
    //
    Log.i(Tag, "onCreate方法被調(diào)用了!");
    // 創(chuàng)建數(shù)據(jù)庫的表
    db.execSQL("create table stu(_id integer primary key autoincrement,name varcher(20),num varcher(20))");
    Log.i(Tag, "數(shù)據(jù)庫表創(chuàng)建成功乒疏!");
}

/**
 * 數(shù)據(jù)庫的版本升級時調(diào)用  數(shù)據(jù)庫只可升級不可降級 升級時能夠修改表結(jié)構(gòu)
 */
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
    // TODO Auto-generated method stub
    Log.i(Tag, "onUpgrade方法被調(diào)用了,數(shù)據(jù)庫版本升級了");
}
}

數(shù)據(jù)庫的增刪改查

-增加
insert into 表名 (‘字段名’....)values('字段名對應(yīng)的數(shù)據(jù)'....)
例子:insert into stu ('name','num','startdate','stopdate')
values('risingsun','123456789011111111','20220211','20660211')

-查詢 select * from 表名 查詢表中所有的數(shù)據(jù)
select * from stu

-修改 update 表名 set 字段名=“” where 字段名=“”
update stu set name='happy' where _id=4 把_id為4的 數(shù)據(jù)的名字改為‘happy’

-刪除 delete form 表名 where 字段=“”
delete FROM stu WHERE _id=3 刪除表中_id為3的一行數(shù)據(jù)

注意:寫這些操作數(shù)據(jù)庫的語句最好在可視化數(shù)據(jù)庫工具中編寫運行后再寫入我們的程序 能夠最大程度的防止sql語句出錯 切記


Android下文件訪問權(quán)限(非常重要)

-原理:使用的是Linux系統(tǒng)文件的權(quán)限
默認(rèn)情況下:Android應(yīng)用程序只能讀取自己的應(yīng)用數(shù)據(jù)不能讀取別的應(yīng)用程序的數(shù)據(jù)

  • rw- rw- ---
    第一位表示: 文件的類型 d:表示文件夾 - :表示文件
    前三位表示: 當(dāng)前用戶的權(quán)限
    中間三位表示:當(dāng)前用戶所在的組的權(quán)限
    最后三位表示: 其他用戶

r:讀榷钛谩(read)
w:寫入(write)

四中常見的文件格式
1)只讀
openFileOutput("private.txt", MODE_WORLD_READABLE);//MODE_WORLD_READABLE==1 只讀
2)只寫
openFileOutput("readable.txt", MODE_WORLD_WRITEABLE);//MODE_WORLD_WRITEABLE
3)可讀可寫
openFileOutput("writeable.txt", MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE);//表示可讀可寫
4)私有
openFileOutput("publicable.txt", MODE_PRIVATE);//MODE_PRIVATE==0 表示私有 只有自己可以訪問

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怕吴,隨后出現(xiàn)的幾起案子窍侧,更是在濱河造成了極大的恐慌,老刑警劉巖转绷,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伟件,死亡現(xiàn)場離奇詭異,居然都是意外死亡议经,警方通過查閱死者的電腦和手機斧账,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煞肾,“玉大人咧织,你說我怎么就攤上這事〕犊酰” “怎么了拯爽?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵索抓,是天一觀的道長钧忽。 經(jīng)常有香客問我,道長逼肯,這世上最難降的妖魔是什么耸黑? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮篮幢,結(jié)果婚禮上大刊,老公的妹妹穿的比我還像新娘。我一直安慰自己三椿,他們只是感情好缺菌,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搜锰,像睡著了一般伴郁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛋叼,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天焊傅,我揣著相機與錄音剂陡,去河邊找鬼。 笑死狐胎,一個胖子當(dāng)著我的面吹牛鸭栖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播握巢,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晕鹊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镜粤?” 一聲冷哼從身側(cè)響起捏题,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肉渴,沒想到半個月后公荧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡同规,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年循狰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片券勺。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡绪钥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出关炼,到底是詐尸還是另有隱情程腹,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布儒拂,位于F島的核電站寸潦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏社痛。R本人自食惡果不足惜见转,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒜哀。 院中可真熱鬧斩箫,春花似錦、人聲如沸撵儿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淀歇。三九已至易核,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間房匆,已是汗流浹背耸成。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工报亩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人井氢。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓弦追,卻偏偏與公主長得像,于是被迫代替她去往敵國和親花竞。 傳聞我的和親對象是個殘疾皇子劲件,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容