一、文件操作
1.將文件寫入SD卡
//獲取寫入的路徑及文件名稱
File file =new File(Environment.getExternalStorageDirectory(),name);
FileOutPutStream fos =new FileOutPutStream(file);
//寫入內容
fos.write(content.getBytes());
但是,最好是檢測一下手機中內存卡是否可用。在MainActivity的onResume()方法中://檢測手機中的內存卡是否裝載
boolean isMounted =Environment.getExternalStorageDirectory().equals(Environment.MEDIA_MOUNTED)?true:false;
//根據SD卡是否裝載來確定按鈕是否可用
saveSD.setEnabled(isMounted);
兩個注意事項:1.在文件寫入寫出操作時注意聲明異常或者直接try catch環繞2.在寫入外存儲設備時需要獲得寫入外存儲設備的權限,在Manifest中聲明即可
2.將文件寫入Rom
總共兩步:FileOutputStream fos =Context.openFileOutput(name,mode);fos.write(content.getBytes());三個注意:1.不需要聲明權限2.mode總共有四種,如果想設置成私有屬性,即爲Context.MODE_PRIVATE,同時此程序外的其他程序將不能訪問到數據3.如果一個類繼承自Activity,Context等等屬於Context的類,那麼openFileOutPut()前面可省略context。當然如果一個類沒有繼承屬於Context類,那麼如果想用這個方法需要構造函數傳進來Context
二.SharedPreferences操作
爲什麼要用SharedPreferences(接口),因爲它是數據的持久化操作數據可以被保存起來,程序關閉後再打開數據仍然存在,否則我們用Map就可以實現了。與Map一樣,它採用的是鍵值對的存儲方式四步:獲取SharedPreferences 對象,返回Editor編輯器,放入數據,提交(類似於Transaction的過程)SharedPreferences sp =getSharedPreferences(name,mode);//指定文件名和modeEditor editor = sp.edit(); //獲取編輯器editor.putString("key","value"); //放入數據editor.commit(); //提交數據sp.getString("key",""); // 獲取數據,第二個參數 //爲默認值,如果沒有默認值,則寫“”就可以了
注意,放數據是Editor對象放入,取數據是SharedPreferences對象取出。
三、SQLite數據庫的操作
1.用SQL語句進行創建數據庫以及增刪改查(包括查詢數量,查詢所有,分頁查詢)
1.1創建數據庫
1.新建類(此處爲DBOpenHelper)繼承自SQLiteOpenHelper ,重寫構造方法(四個參數),重寫onCreate()和 onUpgrade()方法(一個用來創建數據庫,一個用來寫數據庫的升級邏輯)
2.DBOpenHelper helper = new DBOpenHelper(context,name,null,version);
helper.getWriteabDatabase(); //至此數據庫創建成功1.2 增、刪、改
邏輯都很簡單,獲得SQLiteDatabase對象,然後執行SQL語句,之後關閉SQL
//假設上面已經創建了一個Person表,裏面有三列,分別是id ,name ,balance
public void insertDB(Person p){ //插入數據----->>增
SQLiteDatabase db = helper.getWriteableDatabase();
db.execSQL("INSERT INTO person(name,balance) VALUES(?,?)",new Object[]{p.getName(),p.getBalance()});
db.close();
}
public void deleteDB(int balance){ //刪除數據------>>刪
//根據資金的多少進行刪除操作
.... //獲得db,同上
db.exec("DELETE FROM person WHERE balance<?",new Object[]{balance};db.close();}1.3 查(查一個,查所有,查數據總數,查分頁)
2.另外一種增刪改查//根據id返回一個Person對象 public Person qureyDb(int id){ SQLiteDatabase db = helper.getReadableDatabase(); //獲取Cursor對象 Cursor c = db.rawQuery("SELECT name,balance FROM person WHERE id =?", new String[]{id + ""}); Person p = null; if(c.moveToNext()) { //根據列名獲取列所在的索引,通過getString,getInt取值,進而得到一個Person對象 p = new Person(id,c.getString(c.getColumnIndex("name")), c.getInt(1)); } c.close(); db.close(); return p; } //將所有的數據查詢出來,放在一個列表中 public List<Person> queryAll(){ SQLiteDatabase db = helper.getReadableDatabase(); //沒有條件,後面的值寫null Cursor c = db.rawQuery("SELECT id,name,balance FROM person", null); Person p = null; List<Person> persons = new ArrayList<Person>(); while(c.moveToNext()){ p = new Person(c.getInt(0),c.getString(1),c.getInt(2)); persons.add(p); } c.close(); db.close(); return persons; } //分頁查詢,查詢第幾頁,以及每頁有多少條數據 public List<Person> queryPage(int num,int capacity){ //獲取起始索引 int start = (num-1)*capacity; int end = start +capacity; SQLiteDatabase db = helper.getReadableDatabase(); Cursor c = db.rawQuery("SELECT id,name,balance FROM person LIMIT ?,?", new String[]{start+"",end+""}); Person p = null; List<Person> persons = new ArrayList<Person>(); while(c.moveToNext()){ p = new Person(c.getInt(0),c.getString(1),c.getInt(2)); persons.add(p); } c.close(); db.close(); return persons; } //查詢表中數據總條數 public int QueryCount(){ SQLiteDatabase db = helper.getReadableDatabase(); Cursor c = db.rawQuery("SELECT COUNT(*) FROM person", null); c.moveToNext(); int count = c.getInt(0); return count; }
和上面完全用SQL語句不同,這裏是SQLiteDatabase對象直接執行insert(),delete(),update(),query(),需要注意的就是參數問題。注意對比與執行SQL語句的不同,就是將關鍵字(像COUNT WHERE SELECT省略),將我們自己寫的東西變成參數作爲各個方法中所對應的參數值。另,其中涉及ContentValues,它和Map類似,可以存儲鍵值對,放進數據。下面是代碼://插入操作 public void dbInsert(Person p){ SQLiteDatabase db = helper.getWritableDatabase(); //db.execSQL("insert into person(name,balance) values(?,?)",new Object[]{p.getName(),p.getBalance()}); //獲取ContentValues對象 ContentValues values = new ContentValues(); values.put("name",p.getName()); values.put("balance",p.getBalance()); //對比db.execSQL("insert into person(name,balance) values(?,?)",new Object[]{p.getName(),p.getBalance()}); db.insert("person", null, values);//(Table name,null,ContentValues values) db.close(); } //刪除操作 public void delete(int id){ SQLiteDatabase db = helper.getWritableDatabase(); //對比db.execSQL("delete from person where id =?",new Object[]{id}); //注意括號裏的參數(Table name,Whereclause,String[] whereArgs) db.delete("person", "id=?", new String[]{id + ""}); db.close(); } //更改操作 public void update(Person p){ SQLiteDatabase db = helper.getWritableDatabase(); //db.execSQL("update person SET name=?,balance=? Where id=?",new Object[]{p.getName(), p.getBalance(),p.getId()}); ContentValues values = new ContentValues(); values.put("name",p.getName()); values.put("balance",p.getBalance()); //根據括號裏的參數來寫 db.update("person", values, "id=?", new String[]{p.getId() + ""}); db.close(); } public Person dbquery(int id){ SQLiteDatabase db = helper.getReadableDatabase(); Person p = null; //Cursor c = db.rawQuery("SELECT name,balance FROM person WHERE id =?", new String[]{id + ""}); Cursor c = db.query("person",new String[]{"name","balance"},"id=?",new String[]{id+""},null,null,null); if(c.moveToNext()){ p= new Person(id,c.getString(c.getColumnIndex("name")),c.getInt(1)); } c.close(); db.close(); return p; } public List<Person> dbQueryAll(){ SQLiteDatabase db = helper.getReadableDatabase(); List<Person> persons = new ArrayList<Person>(); Person p = null; Cursor c = db.query("person",null,null,null,null,null,null,null); while(c.moveToNext()){ p = new Person(c.getInt(0),c.getString(1),c.getInt(2)); persons.add(p); } c.close(); db.close(); return persons; } //查詢總數據條數 public int queryCount(){ SQLiteDatabase db = helper.getReadableDatabase(); //將COUNT(*)作爲一列 Cursor c = db.query("person", new String[]{"COUNT(*)"}, null, null, null, null, null); c.moveToNext(); int count = c.getInt(0); c.close(); db.close(); return count; } public List<Person> queryPage(int num,int capacity){ SQLiteDatabase db = helper.getReadableDatabase(); int start = (num-1)*capacity; int end = start +capacity; // db.execSQL("select id,name,balance from person limit ?,?",new String[]{start+"",end+""}); //調用query的帶有limit的重載方法 Cursor c = db.query("person",null,null,null,null,null,null,start+","+end); List<Person> persons = new ArrayList<Person>(); Person p = null; while (c.moveToNext()){ p = new Person(c.getInt(0),c.getString(1),c.getInt(2)); persons.add(p); } c.close(); db.close(); return persons; }