2025-02-17

相信很多同學都會有操作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的專欄

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *