博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发小记--开发实用工具类--数据库操作类
阅读量:7105 次
发布时间:2019-06-28

本文共 2548 字,大约阅读时间需要 8 分钟。

hot3.png

做应用开发难免需要用到数据库,而做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数据库实例 
     
*/
    
protected
 SQLiteDatabase mDb 
=
 
null
;
    
    
/**
     * 数据库创建帮手
     
*/
    
protected
 CreateDBHelper mDbHelper 
=
 
null
;
    
    
/**
     * 获得当前数据库帮手类标识(一般是该类名称),用于日志等的记录
     * 
     
*/
    
protected
 
abstract
 String getTag();
    
    
/**
     * 获得数据库名称
     * 
     
*/
    
protected
 
abstract
 String getDatabaseName();
    
    
/**
     * 获得数据库版本,值至少为1。
     * 当数据库结构发生改变的时候,请将此值加1,系统会在初始化时自动调用
     * createDBTables和dropDBTables方法更新数据库结构。
     * 
     
*/
    
protected
 
abstract
 
int
 getDatabaseVersion();
    
    
/**
     * 创建数据库表的SQL语句,一个元素一条语句
     * 
     
*/
    
protected
 
abstract
 String[] createDBTables();
    
    
/**
     * 删除数据库表的SQL语句,一个元素一条语句
     * 
     
*/
    
protected
 
abstract
 String[] dropDBTables();
    
    
/**
     * 
     * TODO 内部数据库创建帮手类
     * 
     
*/
    
private
 
class
 CreateDBHelper 
extends
 SQLiteOpenHelper
    
{
        
public
 CreateDBHelper(Context ctx)
        
{
            
super
(ctx, getDatabaseName(), 
null
, getDatabaseVersion());
        }
        @Override
        
public
 
void
 onCreate(SQLiteDatabase db) 
{
            
//
 TODO Auto-generated method stub
            executeBatch(createDBTables(), db);
        }
        @Override
        
public
 
void
 onUpgrade(SQLiteDatabase db, 
int
 oldVersion, 
int
 newVersion) 
{
            
//
 TODO Auto-generated method stub
            Log.w(getTag(), 
"
Upgrading database '
"
 
+
 getDatabaseName() 
+
 
"
' from version 
"
 
+
 oldVersion 
+
 
"
 to 
"
 
+
 newVersion);
            executeBatch(dropDBTables(), db);
            onCreate(db);
        }
        
        
/**
         * 批量执行Sql语句
         * 
@param
 sqls
         * 
@param
 db
         
*/
        
private
 
void
 executeBatch(String[] sqls, SQLiteDatabase db)
        
{
            
if
(sqls 
==
 
null
)
                
return
;
            
            db.beginTransaction();
            
try
            
{
                
int
 len 
=
 sqls.length;
                
for
(
int
 i 
=
 
0
; i 
<
 len; i
++
)
                
{
                    db.execSQL(sqls[i]);
                }
                db.setTransactionSuccessful();
            }
catch
(Exception e)
{
                Log.e(getTag(), e.getMessage(), e);
            }
finally
{
                db.endTransaction();
            }
        }
        
    }
    
    
/**
     * 打开或者创建一个指定名称的数据库
     * 
@param
 dbName
     * 
@param
 ctx
     
*/
    
public
 
void
 open(Context ctx)
    
{
        Log.i(getTag(), 
"
Open database '
"
 
+
 getDatabaseName() 
+
 
"
'
"
);
        mDbHelper 
=
 
new
 CreateDBHelper(ctx);
        mDb 
=
 mDbHelper.getWritableDatabase();
    }
    
    
/**
     * 关闭数据库
     
*/
    
public
 
void
 close()
    
{
        
if
(mDbHelper 
!=
 
null
)
        
{
            Log.i(getTag(), 
"
Close database '
"
 
+
 getDatabaseName() 
+
 
"
'
"
);
            mDbHelper.close();
        }
    
    }
    
}

转载于:https://my.oschina.net/zhangjie830621/blog/133038

你可能感兴趣的文章
ApacheCN 学习资源汇总 2018.12
查看>>
用node探究下http缓存
查看>>
js实现复制粘贴功能
查看>>
前端开发中提到的“脚手架”到底指什么,CLI?gulp 和 gulp-cli有什么区别
查看>>
Ghost配置4——添加网站统计
查看>>
在keystone.js后台编辑器中上传图片
查看>>
请求限流
查看>>
微信小程序网络通信(一)
查看>>
Data Lake Analytics-数据分析时代迎来新变革
查看>>
Vue.js 组件库事件系统设计
查看>>
移动端模拟滚动
查看>>
webpack4.17.1起步
查看>>
linux user xxx is not allowed to execute '/bin/su'
查看>>
Meteor部署问题汇总
查看>>
SpringMVC集成Swagger
查看>>
Kafka 文档(介绍)
查看>>
antd 和 element上传文件详解与FormData详解
查看>>
746. Min Cost Climbing Stairs
查看>>
如何利用极光推送的新功能玩转世界杯营销
查看>>
一起来学SpringBoot | 第八篇:通用Mapper与分页插件的集成
查看>>