android--乐学成语--------复制数据库,测试数据库

一:

在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>



3.接下来在test包下,新建DBOpenHelperTest继承AndroidTestCase,代码如下:

//只封装了一个方法,该方法调用了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();
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值