Android开发基础之SQLite数据库 单元测试的使用

来源:互联网 发布:软件验收测试报告模板 编辑:程序博客网 时间:2024/05/18 09:28

1、安卓自带数据库,SQLite数据库,这个数据库操作简单,占用内存小,是Android系统已经携带的数据库。

2、安卓数据库的使用步骤:


1、首先需要新建一个类继承SQLiteOpenHelper(数据库打开帮助器),这个接口有2个抽象函数必须实现,分别是数据库创建时调用和数据库升级时调用。

然后本身必须要重写一个构造函数。这个构造函数传入的几个参数非常重要。

public class MyOpenHelper extends SQLiteOpenHelper {


//这里必须要有一个构造函数,因为这几个参数非常重要。
//name是数据库的名字,cursor是游标,会在返回数据时创建对象,verson版本
public MyOpenHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}


//这里是数据库创建时调用,不是创建数据库,在这里可以初始化一些表
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("数据库创建了");
//这里主键用下划线id,自增长
db.execSQL("create table person(_id integer primary key autoincrement,name char(10),phone char(20),salary integer(20))");
}


//这里是数据库升级时调用,只要构造函数里verson变大了就调用,比如可以添加一张表
public void onUpgrade(SQLiteDatabase db, int oldverson, int newverson) {
// TODO Auto-generated method stub
System.out.println("数据库升级了");
}


}

2、在打开帮助器类新建完成后可以开始创建数据库了,包括数据库的几种基本功能。

public class Test extends AndroidTestCase {


private MyOpenHelper oh;
private SQLiteDatabase db;


public void test() {
//获取一个打开帮助器的对象,其中用getContext来获取虚拟上下文。
MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
//调用oh里的方法获取数据库对象。
SQLiteDatabase db = oh.getReadableDatabase();//其中这里readable和writebale没有什么区别,只有当硬盘满的时候才有区别
}

@Override
protected void setUp() throws Exception {//这里是单元测试的内容,为什么要这样做了?首先为了代码好看,我们把获取oh和db对象的2个变量提升到全局变量

// TODO Auto-generated method stub //然后当我们对某个函数进行测试的时候便不可以获取到相应的值,这是setup函数就是会在测试用例前来执行。
super.setUp();
oh = new MyOpenHelper(getContext(), "people.db", null, 1);
db = oh.getWritableDatabase();
}

@Override
protected void tearDown() throws Exception {//同理这是测试函数结束后调用
// TODO Auto-generated method stub
super.tearDown();
db.close();
}

public void insert(){
//oh = new MyOpenHelper(getContext(), "people.db", null, 1);
//db = oh.getWritableDatabase();
//往表里添加数据,先用占位符代替,然后new object数组来填充
db.execSQL("insert into person(name ,phone ,salary) values (? ,? ,?)",new Object[]{"张三","121213",10000});
db.execSQL("insert into person(name ,phone ,salary) values (? ,? ,?)",new Object[]{"张三2","121213",100001});
db.execSQL("insert into person(name ,phone ,salary) values (? ,? ,?)",new Object[]{"张三3","121213",100002});
db.execSQL("insert into person(name ,phone ,salary) values (? ,? ,?)",new Object[]{"张三4","121213",100003});
db.execSQL("insert into person(name ,phone ,salary) values (? ,? ,?)",new Object[]{"张三5","121213",100004});
//db.close();
}

public void delete(){
//oh = new MyOpenHelper(getContext(), "people.db", null, 1);
//db = oh.getWritableDatabase();
db.execSQL("delete from person where name = ?", new Object[]{"张三"});
//db.close();
}

public void update(){
db.execSQL("update person set salary = ? where name = ?", new Object[]{"13909","张三2"});
}

public void select(){
Cursor cursor = db.rawQuery("select name, salary from person", null);
while(cursor.moveToNext())
{
//这里先通过获取列索引来获取列的ID,因为getstring只能传入int
String name = cursor.getString(cursor.getColumnIndex("name"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
System.out.println("name:"+name+"salary"+salary);
}
}

public void insertApi(){
ContentValues values = new ContentValues();
values.put("name", "李四");
values.put("phone", "123133");
values.put("salary", 23232);
db.insert("person", null, values);
}

public void deleteApi(){
db.delete("person", "_id = ?", new String[]{"3"});


public void updateApi(){
ContentValues values = new ContentValues();
values.put("salary", 121212);
db.update("person", values, "name = ?", new String[]{"张三3"});
}


public void selectApi(){
Cursor cursor = db.query("person", new String[]{"name","salary"}, null, null, null, null, null, null);
while(cursor.moveToNext())
{
//这里先通过获取列索引来获取列的ID,因为getstring只能传入int
String name = cursor.getString(cursor.getColumnIndex("name"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
System.out.println("name:"+name+"salary"+salary);
}
}
}


3、关于单元测试的用法:

首先需要创建一个类继承AndroidTestCase,然后在清单文件里加入以下

<instrumentation 
   android:name="android.test.InstrumentationTestRunner"
   android:targetPackage="com.example.sqlite"
   ></instrumentation>

其中name是固定的,sqlite是需要测试的包的包名。

然后在app里加入以下

<uses-library android:name="android.test.runner"/>

这样便可可以用于测试。

0 0
原创粉丝点击