一:
在src下创建以下包和类:
1.我们需要先在db包下新建一个DBOpenHelper类,代码如下所示:
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 cn.edu.bztc.happyidiom.R;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;
public class DBOpenHelper {
private final int BUFFER_SIZE = 400000;//缓冲区大小
public static final String DB_NAME = "idioms.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){
Log.e("Database","IO exception");
e.printStackTrace();
}
return null;
}
}
以上代码主要实现的功能主要是使用输入输出流将idioms.db复制到手机中默认存放数据库的位置。
2.修改AndroidManifest.xml文件搭建起单元测试的环境,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.edu.bztc.happyidiom"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
<uses-library android:name="android.test.runner" />
<activity
android:name="cn.edu.bztc.happyidiom.activity.MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="cn.edu.bztc.happyidiom.activity.StudyActivity"
android:label="@string/title_activity_study" >
</activity>
<activity android:name="cn.edu.bztc.happyidiom.activity.StudyAnimalActivity">
</activity>
</application>
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.edu.bztc.happyidiom" >
</instrumentation>
</manifest>
//只封装了一个方法,该方法调用了DBOpenHelper类里面定义的openDatabase()方法
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();
}
}