SpeSqliteManager4Android
介绍
一个轻量级无侵入式管理android数据库自动升级的管理类(支持SQLiteOpenHelper、room(编码中))
实际导入代码
核心代码
1. 数据库配置文件dbupdate.json
{
"dbName": "localdb",
"dbVersion": 5 ,
"dbTables": [
{
"tableName":"dbconfig",
"columns":[
{
"key": "dbversion",
"keyType": "TEXT"
},
{
"key": "dbname",
"keyType": "TEXT"
},
{
"key": "dbtables",
"keyType": "TEXT"
}
]
},
{
"tableName":"teacher",
"columns":[
{
"key": "id",
"keyType": "INTEGER PRIMARY KEY AUTOINCREMENT"
},
{
"key": "name",
"keyType": "TEXT"
},
{
"key": "age",
"keyType": "TEXT"
},
{
"key": "sex",
"keyType": "TEXT"
}
]
}
]
}
2.开始调用
SpeSqliteDBService.getInstance(this);
3.数据库相关模型
public class SpeSqliteColumnSettingModel {
/**
* key名
*/
public String key;
/**
* 该key的在sql中的key字段修饰,比如INTEGER PRIMARY KEY AUTOINCREMENT或TEXT
*/
public String keyType;
}
public class SpeSqliteSettingModel {
/**
* 数据库名
*/
public String dbName;
/**
* 数据库版本号
*/
public int dbVersion;
/**
* 所有表数组
*/
public ArrayList dbTables;
}
public class SpeSqliteTableSettingModel {
/**
* 表名
*/
public String tableName;
/**
* 当前表字段设计
*/
public ArrayList columns;
/**
* 是否被索引过:代表是否在新表里被删除了
*/
public boolean indexed;
}
4.SQLiteOpenHelper子类,可以看到改完后该类非常干净。
public class SpeSqliteDBService extends SQLiteOpenHelper {
private static final String TAG = "SpeSqliteDBService";
private static SpeSqliteDBService instance = null;
private Context context = null;
private SQLiteDatabase db = null;
public static synchronized SpeSqliteDBService getInstance(Context context) {
if (instance == null){
synchronized (SpeSqliteDBService.class){
if (instance == null){
instance = new SpeSqliteDBService(context);
instance.context = context;
instance.db = instance.getWritableDatabase();
}
}
}
return instance;
}
public SpeSqliteDBService(Context context) {
super(context,SpeSqliteUpdateManager.getInstance().init(context).currentAppDBSetting().dbName,
null,SpeSqliteUpdateManager.getInstance().init(context).currentAppDBSetting().dbVersion);
}
@Override
public void onCreate(SQLiteDatabase db) {
SpeSqliteUpdateManager.getInstance().create(db);
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {
SpeSqliteUpdateManager.getInstance().upgrade(db);
}
}
5.SpeSqliteUpdateManager 负责针对本地db的创建、新建表、表字段升级、删除表,通过配置的方式去升级数据库,减少代码的改动,核心思想:以静制动
public class SpeSqliteUpdateManager {
/**
*主app的context
*/
private Context appContext = null;
/**
*本地db中的配置项
*/
private SpeSqliteSettingModel localDBSetting = null;
/**
*当前app中assets的配置项
*/
private SpeSqliteSettingModel currentAppDBSetting = null;
private final Gson gson = new Gson();
private String currentDBJson = null;
private static final String kDBJsonName = "dbupdate.json";
private SpeSqliteUpdateManager() {
}
public static SpeSqliteUpdateManager getInstance() {
return SingletonClassInstance.instance;
}
private static class SingletonClassInstance {
private static final SpeSqliteUpdateManager instance = new SpeSqliteUpdateManager();
}
public SpeSqliteUpdateManager init(Context context){
this.appContext =context;
return this;
}
/**
* 数据库第一次创建时的调用函数
* @param db db
*/
public void create(SQLiteDatabase db){
SpeSqliteSettingModel currentDBModel = SpeSqliteUpdateManager.getInstance().currentAppDBSetting();
for(int i=0;i=_old.columns.size()){
SpeSqliteColumnSettingModel column = _new.columns.get(i);
String sql = " alter table "+_old.tableName+" add column ";
sql+=column.key;
sql+=" ";
sql+= column.keyType;
executeSQL(db,sql);
}
}
}
/**
* 新增表
* @param db db
* @param table 表配置
*/
private void createTableSQL(SQLiteDatabase db,SpeSqliteTableSettingModel table){
String sql = " create table if not exists "+table.tableName+" (";
for(int j=0;j tables = new ArrayList<>();
for(int i=0;i
运行效果
后续工作 :
1.完成针对room数据的支持,避免每次写Migration升级函数。
喜欢的朋友可以移步至gitee查看源码:SpeSqliteManager4Android: 一个用来管理android数据库自动字段升级的管理类
页面更新:2024-04-12
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号