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