Android本地數據操作
在安卓開發中,不操作數據庫的情況幾乎是不可能的!一般情況下我們是在啟動應用后,會在本地建立數據名(DATABASE_NAME)為XX數據庫,然后 在需要用的時候進行增刪改查操作。但有時候,我們也可能不會這樣進行操作,我們會先把建立好的數據庫放在項目的本地文件夾(如 res/raw,assert)下面,然后再對數據庫進行操作。這種方案也有一定的好處,就是我們先可以用數據庫工具建立好數據表,然后直接在代碼中操作 表就可以了,就不用再用create table之類的建表語句建立表格,可以減少一些代碼。不過現在有很多orm操作框架,直接在項目中建表操作也是相當地easy的。
大概的步驟就是:1,建立好數據庫如test.db;
2,把建立好的數據庫test.db放到項目本地文件夾;
3,對數據庫進行操作。
下面是操作的部分代碼(我的數據庫是放在res/raw文件夾下的):
首先把數據庫保存到內存中:
public class dbSaveToLocal {//數據庫存儲路徑,當然也可以保存到sd卡中 String filePath = "data/data/com.ldm.cn/test.db";
//數據庫存放的文件夾 data/data/com.ldm.cn下 String pathStr = "data/data/com.ldm.cn";
SQLiteDatabase database;
public SQLiteDatabase getDatabase(Context context){
System.out.println("filePath:"+filePath);
File file=new File(filePath);
//查看數據庫文件是否存在
if( file.exists(){Log.i("test", "存在數據庫"); //存在則直接返回打開的數據庫
return SQLiteDatabase.openOrCreateDatabase(file, null);
}else{
//不存在先創建文件夾
File path=new File(pathStr);
if (path.mkdir()){
Log.i("test", "創建成功"); }else{
Log.i("test", "創建失敗"); };
try {//得到數據庫的輸入流 InputStream is=getResources().openRawResource(R.raw.xx); Log.i("test", is+""); //用輸出流寫到SDcard上面 FileOutputStream fos=new FileOutputStream(file); //創建byte數組 用于1KB寫一次 byte[] buffer=new byte[1024]; int count = 0; while((count = is.read(buffer))>0){ fos.write(buffer,0,count); } //最后關閉就可以了 fos.flush(); fos.close(); is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } //就可以返回數據庫了 return openDatabase(context); }
}
}</pre>接下來有了數據庫了,就可以在需要操作的地方用代碼操作數據庫中相應的數據表了。當然我們有時在項目中已經建立好數據庫, 我們可以把單個的數據表文件(如json/xml等)放在raw下面,然后通過文件流把內容存到數據庫中對應的表格中,然后再操作數據。