Android开发小记--开发实用工具类--数据库操作类
16lz
2022-06-21
Android开发小记--开发实用工具类--数据库操作类
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();
}
}
}
做应用开发难免需要用到数据库,而做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();
}
}
}
更多相关文章
- android 触摸事件、点击事件的区别
- Android之AsyncTask的内存泄露问题
- php实现post请求 接收android客户端json数据 存储数据库 并返回j
- Android(安卓)操作串口 (android serial port api)
- Android中Handler的作用
- Android之数据存储详解(二)之SQLite数据库存储数据
- Android(安卓)操作系统 获取Root权限 原理解析
- Android位图操作
- android Room库使用问题