我们就是要在应用启动的时候读取assets目录下的数据库,然后把test.db写入SDcard的data/data/com.datab.cn路径下边。
我们首先新建一个类:SQLdm.java:
[java] view plain copypackagecom.datab.cn;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importandroid.content.Context;importandroid.content.res.AssetManager;importandroid.database.sqlite.SQLiteDatabase;importandroid.util.Log;/*** 这个类就是实现从assets目录读取数据库文件然后写入SDcard中,如果在SDcard中存在,就打开数据库,不存在就从assets目录下复制过去
*@authorBig_Adamapple
**/
public classSQLdm {//数据库存储路径
String filePath = "data/data/com.datab.cn/test.db";//数据库存放的文件夹 data/data/com.main.jh 下面
String pathStr = "data/data/com.datab.cn";
SQLiteDatabase database;publicSQLiteDatabase openDatabase(Context context){
System.out.println("filePath:"+filePath);
File jhPath=newFile(filePath);//查看数据库文件是否存在
if(jhPath.exists()){
Log.i("test", "存在数据库");//存在则直接返回打开的数据库
return SQLiteDatabase.openOrCreateDatabase(jhPath, null);
}else{//不存在先创建文件夹
File path=newFile(pathStr);
Log.i("test", "pathStr="+path);if(path.mkdir()){
Log.i("test", "创建成功");
}else{
Log.i("test", "创建失败");
};try{//得到资源
AssetManager am=context.getAssets();//得到数据库的输入流
InputStream is=am.open("test.db");
Log.i("test", is+"");//用输出流写到SDcard上面
FileOutputStream fos=newFileOutputStream(jhPath);
Log.i("test", "fos="+fos);
Log.i("test", "jhPath="+jhPath);//创建byte数组 用于1KB写一次
byte[] buffer=new byte[1024];int count = 0;while((count = is.read(buffer))>0){
Log.i("test", "得到");
fos.write(buffer,0,count);
}//最后关闭就可以了
fos.flush();
fos.close();
is.close();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();return null;
}//如果没有这个数据库 我们已经把他写到SD卡上了,然后在执行一次这个方法 就可以返回数据库了
returnopenDatabase(context);
}
}
}然后,我们在DatabActivity.java中获得数据库中的数据:
[java] view plain copypackagecom.datab.cn;importandroid.app.Activity;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.os.Bundle;importandroid.widget.TextView;public class DatabActivity extendsActivity {/**Called when the activity is first created.*/@Overridepublic voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.main);//打开数据库输出流
SQLdm s = newSQLdm();
SQLiteDatabase db=s.openDatabase(getApplicationContext());
TextView textv=(TextView) findViewById(R.id.textv);//查询数据库中testid=1的数据
Cursor cursor = db.rawQuery("select * from testbiao where testid=?", new String[]{"1"});
String name= null;if(cursor.moveToFirst()){
name= cursor.getString(cursor.getColumnIndex("name"));
}//这是一个TextView,把得到的数据库中的name显示出来.
textv.setText(name);
cursor.close();
}
}