将数据库保存到Android默认位置
2016-06-14 20:23
363 查看
基本思想:用FileInputStream 读取数据库,再用FileOutputStream 把读到的数据库写入到那个目录。
代码实现:
package cn.edu.bztc.happyidiom.db;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;
import cn.edu.bztc.happyidiom.R;
public class DBOpenHelper {
private final int BUFFER_SIZE = 400000;
private static final String DB_NAME = "idiom.db";
public static final String PACKAGE_NAME = "cn.edu.bztc.happyidiom";
public static final String DB_PATH = "/data"
+ Environment.getDataDirectory().getAbsolutePath() + "/"
+ PACKAGE_NAME + "/databases";
private Context context;
public DBOpenHelper(Context context) {
this.context = context;
}
public SQLiteDatabase openDatabase(){
try{
File myDataPath =new File(DB_PATH);
if(!myDataPath.exists()){
myDataPath.mkdirs();
}
String dbfile=myDataPath+"/"+DB_NAME;
if(!(new File(dbfile).exists())){
InputStream is=context.getResources().openRawResource(R.raw.idioms);
FileOutputStream fos=new FileOutputStream(dbfile);
byte[] buffer=new byte[BUFFER_SIZE];
int count=0;
while((count=is.read(buffer))>0){
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile, null);
return db;
}catch(FileNotFoundException e){
Log.e("Database", "File not found");
e.printStackTrace();
}catch (IOException e) {
// TODO: handle exception
Log.e("Database", "IO exception");
e.printStackTrace();
}
return null;
}
}
写完代码后,还要测试有没有复制成功?
先要搭建测试环境:
在AndroidManifest,xml中加入下面代码:
<uses-library android:name="android.test.runner" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.edu.bztc.happyidiom">
</instrumentation>
代码实现:
package cn.edu.bztc.happyidiom.db;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;
import cn.edu.bztc.happyidiom.R;
public class DBOpenHelper {
private final int BUFFER_SIZE = 400000;
private static final String DB_NAME = "idiom.db";
public static final String PACKAGE_NAME = "cn.edu.bztc.happyidiom";
public static final String DB_PATH = "/data"
+ Environment.getDataDirectory().getAbsolutePath() + "/"
+ PACKAGE_NAME + "/databases";
private Context context;
public DBOpenHelper(Context context) {
this.context = context;
}
public SQLiteDatabase openDatabase(){
try{
File myDataPath =new File(DB_PATH);
if(!myDataPath.exists()){
myDataPath.mkdirs();
}
String dbfile=myDataPath+"/"+DB_NAME;
if(!(new File(dbfile).exists())){
InputStream is=context.getResources().openRawResource(R.raw.idioms);
FileOutputStream fos=new FileOutputStream(dbfile);
byte[] buffer=new byte[BUFFER_SIZE];
int count=0;
while((count=is.read(buffer))>0){
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile, null);
return db;
}catch(FileNotFoundException e){
Log.e("Database", "File not found");
e.printStackTrace();
}catch (IOException e) {
// TODO: handle exception
Log.e("Database", "IO exception");
e.printStackTrace();
}
return null;
}
}
写完代码后,还要测试有没有复制成功?
先要搭建测试环境:
在AndroidManifest,xml中加入下面代码:
<uses-library android:name="android.test.runner" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.edu.bztc.happyidiom">
</instrumentation>
<span style="font-size:18px;">创建测试类:</span>
<span style="font-size:18px;"> </span><pre name="code" class="java">package cn.edu.bztc.happyidiom.test; import cn.edu.bztc.happyidiom.db.DBOpenHelper; import android.test.AndroidTestCase; public class DBOpenHelperTest extends AndroidTestCase { public void testDBCopy() { DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext()); dbOpenHelper.openDatabase(); } }
相关文章推荐
- Android应用的界面编程
- Android OptionMenu (选项菜单) 和 ContextMenu (上下文菜单) 、 SubMenu (子菜单)
- 初来驾到,Android小白
- android 移植ffmpeg
- 自定义 Android 过场动画
- android中system.img的打包过程
- 2、Android构建本地单元测试
- 2、Android构建本地单元测试
- Android 广告轮播效果实现
- 详解Android中AsyncTask的使用
- 深入理解Android四大组件之一BroadcastReceiver
- MD5加密帮助类
- 初实android -打招呼
- Button按钮的倒计时实现的一个帮助类
- Android Studio 编译报错com.android.dex.DexException: Multiple dex files define La/We
- Android基础之ontouch事件没有up解决方法
- 你现在努力做的一切,都是为了遇见更好的自己Ant/android/SDK---permission
- MVP模式探讨
- android 图片上传的问题
- android material design之Toolbar(一)