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();
}

}


}

更多相关文章

  1. android 触摸事件、点击事件的区别
  2. Android之AsyncTask的内存泄露问题
  3. php实现post请求 接收android客户端json数据 存储数据库 并返回j
  4. Android(安卓)操作串口 (android serial port api)
  5. Android中Handler的作用
  6. Android之数据存储详解(二)之SQLite数据库存储数据
  7. Android(安卓)操作系统 获取Root权限 原理解析
  8. Android位图操作
  9. android Room库使用问题

随机推荐

  1. android间隔1000毫秒处理点击
  2. JavaWeb + mySQL + Android(安卓)实现And
  3. 【Android】一步注册广播接收器
  4. android简单登陆和注册功能实现+SQLite数
  5. Android数据库升级解决方案
  6. Android的标题栏(状态栏)
  7. android Spinner点击事件处理
  8. Android View.setOnclickListener(),View
  9. Android的包管理机制浅析(二)
  10. android真机调试报错Installation error: