相信很多同学都会有操作SQLite不方便的感觉,对于数据库操作又不能很明显地看出问题,这里我们就接上一章的SQLite操作辅助类进行单元测试,OK,我们来看一下类码:首先是DatabaseHelper.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper
{
//数据库名称
private static final String DB_NAME = "SQLiteDemo.db";
//数据库版本
private static final int DB_VERSION = 1;
//表名
public static final String TABLE_NAME = "demo";
private static final String DB_CREATE = "create table " + TABLE_NAME + " (_id integer primary key autoincrement, name varchar(20), number varchar(10))";
public DatabaseHelper(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
}
/**
* 创建表
*/
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DB_CREATE);
}
/**
* 更新表
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// db.execSQL("drop table if exists " + TABLE_NAME);
// onCreate(db);
}
}
接着再上数据操作辅助类DatabaseServer.java
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DatabaseServer
{
private DatabaseHelper dbHelper;
public DatabaseServer(Context context)
{
this.dbHelper = new DatabaseHelper(context);
}
/**
* 插入数据
*
* @param name
* 名字
* @param number
* 数据
* @return 如果成功则返回true,否则返回false
*/
public boolean insert(String name, String number)
{
//创建或打开数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("number", number);
//插入数据,返回插入数据ID
long id = db.insert(dbHelper.TABLE_NAME, null, cv);
if (id != 0)
{
return true;
}
return false;
}
/**
* 更新数据
*
* @param id
* 数据列_id
* @param number
* 数量
* @return 如果成功则返回true,否则返回false
*/
public boolean update(int id, String number)
{
SQLiteDatabase db = dbHelper.getWritableDatabase();
//Android自带的ContetValues,类似于Map,提供了put(String key, XXX value)的方法存入数据
ContentValues cv = new ContentValues();
cv.put("number", number);
//通过ContentValues更新数据表,返回更新的ID值
int result = db.update(dbHelper.TABLE_NAME, cv, "_id=?",
new String[] { String.valueOf(id) });
if (result != 0)
{
return true;
}
return false;
}
/**
* 删除数据
*
* @param id
* 数据列_id
* @return
*/
public boolean delete(int id)
{
SQLiteDatabase db = dbHelper.getWritableDatabase();
//删除指定ID值
int result = db.delete(dbHelper.TABLE_NAME, "_id=?",
new String[] { String.valueOf(id) });
if (result != 0)
{
return true;
}
return false;
}
/**
* 查询数据
*
* @return 返回数据列表
*/
public Cursor fetchAll()
{
SQLiteDatabase db = dbHelper.getReadableDatabase();
//查询数据表中所有字段
Cursor cursor = db.query(dbHelper.TABLE_NAME, null, null, null, null,
null, "_id desc");
if (cursor != null)
{
return cursor;
}
return null;
}
}
这里两个类都建好了,但我们要测试一下我们建的这两个类是否工作正常,能否插入,更新,删除,查询数据,这里我们就用了TestCase来做测试
SQLiteDemoTest.java
import android.database.Cursor;
import android.test.AndroidTestCase;
public class SQLiteDemoTest extends AndroidTestCase
{
private DatabaseServer dbServer;
/**
* 测试插入数据
*/
public void testinsert()
{
dbServer = new DatabaseServer(this.getContext());
boolean flag = dbServer.insert("沙僧", "10");
System.out.println(flag);
}
/**
* 测试查询数据
*/
public void testfetchAll()
{
dbServer = new DatabaseServer(this.getContext());
Cursor cursor = dbServer.fetchAll();
while (cursor.moveToNext())
{
System.out.println(cursor.getString(1));
System.out.println(cursor.getString(2));
}
}
/**
* 测试更新数据
*/
public void testupdate()
{
dbServer = new DatabaseServer(this.getContext());
boolean flag = dbServer.update(1, "20");
System.out.println(flag);
}
/**
* 测试删除数据
*/
public void testdelete()
{
dbServer = new DatabaseServer(this.getContext());
boolean flag = dbServer.delete(1);
System.out.println(flag);
}
}
当然,别忘记了,在AndroidManifest.xml中还要加入测试库文件
这里有一个
好了,你可以运行一下,看是否是出现蓝条,而不是红条,呵呵,上图