相信很多同学都会有操作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
好了,你可以运行一下,看是否是出现蓝条,而不是红条,呵呵,上图