相信很多同學都會有操作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中還要加入測試庫文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kang.button_demo" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="android.test.runner" />
<activity android:label="@string/app_name" android:name=".SQLiteDemo">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.kang.button_demo" android:label="Tests for My App" />
</manifest>
這裡有一個<uses-library>這是測試庫,必須要加入的,還有就是最後<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.kang.button_demo" android:label="Tests for My App" />也是必須加的,這是定義測試包的,你的測試文件必須要放在根包下的,這裡我的根包是com.kang.button_demo
好瞭,你可以運行一下,看是否是出現藍條,而不是紅條,呵呵,上圖
摘自:kangkangz4的專欄