相信很多同學都會有操作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);}/** * 建立表 */@Overridepublic void onCreate(SQLiteDatabase db){db.execSQL(DB_CREATE);}/** * 更新表 */@Overridepublic 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);//插入資料,返回插入資料IDlong 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
好了,你可以運行一下,看是否是出現藍條,而不是紅條,呵呵,