Android开发小记--开发实用工具类--数据库操作类

做应用开发难免需要用到数据库,而做Android开发就更加会经常使用其自带的SQLite数据库了,因为使用SQLite比使用其他方式更加易于管理和操作。下面是我写的一个数据库操作抽象类,由于Android自带的SQLite数据库操作类已经帮助我们简化了很多操作,所以这个抽象类主要是为了方便我们建库和升级库结构使用的

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;
/***/ /**
*TODO数据库帮手基类,一个数据库对应一个具体实现。
*可以在内部定义表名,字段名和各种业务逻辑操作等等。
*对数据库的增删改操作,请使用事务管理。
*对数据的查询操作,请在使用Cursor前,调用startManagingCursor()方法管理Cursor。
*

*/

public abstract class AbstractDatabaseHelper {

/***//**
*SQLite数据库实例
*/

protectedSQLiteDatabasemDb=null;

/***//**
*数据库创建帮手
*/

protectedCreateDBHelpermDbHelper=null;

/***//**
*获得当前数据库帮手类标识(一般是该类名称),用于日志等的记录
*
@return
*/

protectedabstractStringgetTag();

/***//**
*获得数据库名称
*
@return
*/

protectedabstractStringgetDatabaseName();

/***//**
*获得数据库版本,值至少为1。
*当数据库结构发生改变的时候,请将此值加1,系统会在初始化时自动调用
*createDBTables和dropDBTables方法更新数据库结构。
*
@return
*/

protectedabstractintgetDatabaseVersion();

/***//**
*创建数据库表的SQL语句,一个元素一条语句
*
@return
*/

protectedabstractString[]createDBTables();

/***//**
*删除数据库表的SQL语句,一个元素一条语句
*
@return
*/

protectedabstractString[]dropDBTables();

/***//**
*
*TODO内部数据库创建帮手类
*

*/

privateclassCreateDBHelperextendsSQLiteOpenHelper
{
publicCreateDBHelper(Contextctx)
{
super(ctx,getDatabaseName(),null,getDatabaseVersion());
}

@Override
publicvoidonCreate(SQLiteDatabasedb){
//TODOAuto-generatedmethodstub
executeBatch(createDBTables(),db);
}


@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//TODOAuto-generatedmethodstub
Log.w(getTag(),"Upgradingdatabase'"+getDatabaseName()+"'fromversion"+oldVersion+"to"+newVersion);
executeBatch(dropDBTables(),db);
onCreate(db);
}


/***//**
*批量执行Sql语句
*
@paramsqls
*
@paramdb
*/

privatevoidexecuteBatch(String[]sqls,SQLiteDatabasedb)
{
if(sqls==null)
return;

db.beginTransaction();
try
{
intlen=sqls.length;
for(inti=0;i<len;i++)
{
db.execSQL(sqls[i]);
}

db.setTransactionSuccessful();
}
catch(Exceptione){
Log.e(getTag(),e.getMessage(),e);
}
finally{
db.endTransaction();
}


}


}


/***//**
*打开或者创建一个指定名称的数据库
*
@paramdbName
*
@paramctx
*/

publicvoidopen(Contextctx)
{
Log.i(getTag(),
"Opendatabase'"+getDatabaseName()+"'");
mDbHelper
=newCreateDBHelper(ctx);
mDb
=mDbHelper.getWritableDatabase();
}


/***//**
*关闭数据库
*/

publicvoidclose()
{
if(mDbHelper!=null)
{
Log.i(getTag(),
"Closedatabase'"+getDatabaseName()+"'");
mDbHelper.close();
}

}


}

如果想使用这个类,你需要编写一个子类继承此类并实现相应的抽象方法(主要是返回一些字符串),同时可以在内部定义表名,字段名和各种业务逻辑操作(CRUD)等等。这样子类在被初始化并open之后,就会自动检查数据库是否被创建以及数据库版本是否匹配,如果没有被创建,则会自动被创建;如果版本变化了,则会自动调用onUpgrade方法,升级数据库表结构。虽然此类简化的工作量不多,但我们可以将它作为一个主体,基于这个主体,再根据业务,就可以实现更丰富的功能了。

---------------------------------------------------------
专注移动开发
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian

更多相关文章

  1. 快速开发框架Afinal的使用(数据库操作,HTTP请求,网络图片加载,控件绑
  2. Android(安卓)onTouchEvent, onClick及onLongClick的调用机制
  3. Android(安卓)下使用 JSON 实现 HTTP 请求
  4. 解决 Android(安卓)中使用ListView和CheckBox批量操作时若干问题
  5. Android之AsyncTask的内存泄露问题
  6. php实现post请求 接收android客户端json数据 存储数据库 并返回j
  7. Android(安卓)操作串口 (android serial port api)
  8. Android中Handler的作用
  9. Android开发小记--开发实用工具类--数据库操作类

随机推荐

  1. Android使用第三方字体
  2. Android中自定义组合控件
  3. .Net程序员玩转Android开发---(12)ListVi
  4. Socket Programming on Android
  5. 《Android Dev Guide》系列教程6:Android
  6. Android Studio中创建Kotlin For Android
  7. AIDL实现Android IPC
  8. Android随机验证码的生成
  9. 微信开放平台开发第三方授权登陆(三):Androi
  10. android :让Toast一直显示的解决方法