標籤:
SQLite
輕量級的、嵌入式的、關係型資料庫
Android、IOS等廣泛使用的的資料庫系統
SQLite資料庫之中可以方便的使用SQL語句,實現資料的增加、修改、刪除、查詢等操作
SQLiteOpenHelper:負責建立、開啟、更新、關閉資料庫和建立資料表
SQLiteDataBase:執行SQL語句、對資料表的增刪改查
隱藏檔名,資料將儲存在/data/data/程式的包名稱/databases/xxxx.db中
使用SQLiteDataBase儲存資料
- 1. 開啟或建立test.db資料庫
SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
- 2. 建立表 person
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, _name VARCHAR, _age SMALLINT)");
- 3. 插入資料
//方法【一】
db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{"mar", 1});
//方法【二】ContentValues以索引值對的形式存放資料
ContentValues cv = new ContentValues();
cv.put("_name","joy");
cv.put("_age", 2);
db.insert("person", null, cv); //插入ContentValues中的資料
- 4. 修改資料 【索引值對的方式】
cv = new ContentValues();
cv.put("_age", 35);
db.update("person", cv, "name = ?", new String[]{"joy"});
- 5. 查詢資料
//方法【一】 rawQuery
Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"});
//方法【二】執行query方法
Cursor c=db.query("users", new String[]{"_id","_name","_pwd"},
"_name=?",new String[]{"user01"},null,null,null);
while (c.moveToNext()) {
int id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("_name"));
int age = c.getInt(c.getColumnIndex("_age"));
Log.d("db", "_id=>" + id + ", name=>" + name + ", age=>" + age);
}
c.close();//關閉結果集
- 6. 刪除資料
db.delete("person", "age < ?", new String[]{"35"});//
db.delete("Test","WHERE _id="+0,null);
db.execSQL("delete from 表名 where 條件");
- 7. 關閉當前資料庫
db.close();
- 8. 刪除資料庫 test.db
deleteDatabase("test.db");
SharedPreferences
一種輕量級的資料保持方式,以索引值對的方式將資料存入的xml檔案中,通過key從檔案中取出資料
擷取SharedPreferences的兩種方式:
- 調用Context對象的getSharedPreferences()方法
- 調用Activity對象的getPreferences()方法
兩種方式的區別:
- 調用Context對象的getSharedPreferences()方法獲得的SharedPreferences對象可以被同一應用程式下的其他組件共用.
- 調用Activity對象的getPreferences()方法獲得的SharedPreferences對象只能在該Activity中使用.
SharedPreferences sp=super.getSharedPreferences("app_param", Context.MODE_PRIVATE);
隱藏檔名,資料將儲存在/data/data/base package/shared_prefs/app_param.xml中
定義檔案的操作模式
- 當前應用操作: Context.MODE_PRIVATE
為預設操作模式,代表該檔案是私人資料,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原檔案的內容
- 當前應用操作,追加模式:Context.MODE_APPEND
模式會檢查檔案是否存在,存在就往檔案追加內容,否則就建立新檔案.
- 能被其他應用讀: Context.MODE_WORLD_READABLE
- 能被其他應用寫: Context.MODE_WORLD_WRITEABLE
讀寫SD卡
使用SharedPreferences可以方便的完成資料的儲存功能,但是其只能儲存一些很簡單的資料,如果想儲存更多類型的資料,則可以使用檔案的儲存操作
實現步驟:
- 1. 加入讀寫SD卡許可權
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- 2. 判斷SD卡是否存在【無論是讀還是寫,都要判斷】
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED
- 3. 讀寫檔案
存入資料---putXXX(key,value)
SharedPreferences sp=super.getSharedPreferences("app_param", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sp.edit();
editor.putString("use","tom");
editor.putInt("age", 1); //預設值 1
editor.commit();
取出資料----getXXX(key,default)
SharedPreferences sp=super.getSharedPreferences("app_param", Context.MODE_PRIVATE);
sp.getInt("use",0);//預設值 0
IO操作實現Sdcard存取操作存資料
private int save(String fileName,NewsItem item){
Log.d("io","save()");
int ret=0;
//Environment.getExternalStorageDirectory()拿目錄 Environment.MEDIA_MOUNTED已載入
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
return -1;
}
ObjectOutputStream oos=null;
//super.getFilesDir();//系統路徑
String filePath=Environment.getExternalStorageDirectory().toString()
+File.separator+fileName;//File.separator路徑
File file=new File(filePath);//建立檔案,用於判斷檔案是否存在
File parentFile=file.getParentFile();
if (!parentFile.exists()) {//父資料夾不存在
parentFile.mkdir();//建立檔案所在目錄
}
try {
oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
oos.writeObject(item);
ret=1;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
oos.flush();
if (oos!=null)oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return ret;
}
取資料
private NewsItem read(String fileName){
Log.d("io","read()");
NewsItem item=null; if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//如果sdcard存在
return null;
}
String filePath=Environment.getExternalStorageDirectory().toString()
+File.separator+fileName;//File.separator路徑
File file=new File(filePath);
if (!file.exists()) {
return null;
}
ObjectInputStream ois=null;
try {
ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
item=(NewsItem)ois.readObject();
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return item;
}
SQLite&&SharedPreferences&&IO讀寫Sdcard學習筆記