乐学成语(数据库的应用)

   Android应用中少不了数据库的应用,这次的乐学成语的完成,因为牵扯到需要显示大部分的动物成语的显示,所以要事先准备动物类成语的数据库(这里用事先准备好的数据库进行乐学成语上的应用)

1.首先在res目录下新建raw目录,将事先准备好的数据库复制到这个目录下(因为在raw目录的东西,Android会原封不动的拷贝到程序中,而不会转换为二进制文件);

2.建一个db包,在包下新建一个DBOpenHelper类,代码主要实现使用输入输出流将数据库idioms.db复制到手机中默认存放数据库的位置,代码如下:

<span style="font-size:14px;">package cn.edu.bztc.happyldiom.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.happyldiom.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.happyldiom";// 应用的包名
	public static final String DB_PATH = "/data"
			+ Environment.getDataDirectory().getAbsolutePath() + "/"
			+ PACKAGE_NAME +"/databases";// 在手机里存放数据库的位置

	private Context context;

	public DBOpenHelper(Context context) {
		this.context = context;
		Log.i("file",DB_PATH);
	}

	public SQLiteDatabase openDatabase(){
		try{
			File myDataPath=new File(DB_PATH);
			if(!myDataPath.exists()){
				myDataPath.mkdirs();//如果没有目录则创建
			}
			String dbfile=myDataPath.getAbsolutePath()+"/"+DB_NAME;
			System.out.println(dbfile);
			if(!(new File(dbfile).exists())){//判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库</span>
<span style="font-size:14px;">				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;
		}
}
</span>
3.搭建测试环境测试数据库到底有没有创建到指定的路径下,首先修改AndroidManifest.xml文件搭建起测试环境,修改如下(添加这两句话):
<span style="font-size:14px;"><application
              ......
<user-library android:name="android.test.runner"/>
</application></span><pre name="code" class="java"><span style="font-size:14px;">  <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="cn.edu.bztc.happyldiom" >
    </instrumentation></span>

 
4.这样测试环境搭建起来之后,建test包,包中新建DBOpenHelperTest继承AndroidTestCase,代码如下: 

<span style="font-size:14px;">package cn.edu.bztc.happyldiom.test;

import cn.edu.bztc.happyldiom.db.DBOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;

public class DBOpenHelperTest extends AndroidTestCase{
	public void testDBCopy(){  //封装方法testDBCopy()用于测试
		DBOpenHelper dbopenhelper =new DBOpenHelper(getContext());
		SQLiteDatabase d = dbopenhelper.openDatabase();//调用了DBOpenHelper类里面定义的openDatabase()方法
		System.out.println(d.getVersion());
	}
}
</span>
5.右击DBOpenHelperTest文件,Run as 后选择Android JUnit Test进行单元测试,若出现图中绿条则测试成功,然后看一下数据库有没有复制成功,切换到DDMS,可以发现在data/data/应用下成功创建了数据库,如图:

                        








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值