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下面,然后通過文件流把內容存到數據庫中對應的表格中,然后再操作數據。