范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

开源一个轻量级无侵入式android数据库自动升级的管理类

  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();             for(int i=0;i
  运行效果   后续工作 :   1.完成针对room数据的支持,避免每次写Migration升级函数。   喜欢的朋友可以移步至gitee查看源码:SpeSqliteManager4Android: 一个用来管理android数据库自动字段升级的管理类
优秀父母所具备的合格条件,7个教育例子参考,看看你能占几个?家长百问百答文兰妈谈育儿优秀父母的合格教育,从来都不是注满一桶水而是点燃一把火邻居生了一对双胞胎女儿姐姐是人见人夸的三好学生,妹妹是顽劣的叛逆女孩每次考试出成绩时,妹妹都特别讨厌跟02爆冷完败,德约科维奇出局,不败金身告破,梅总PK2号种子争冠2023ATP500迪拜站男单半决赛,德约科维奇对阵梅德维德夫,最终,德约科维奇连输两盘大比分02爆冷完败,遗憾出局,赛季不败金身告破!而梅总梅德维德夫将在决赛中和2号种子卢布列夫南国习作全新上线,忠实读者有话说时光弹指间,心灵常相伴多年来南国学堂习作版陪伴了许多热爱读书和写作的中小学生一起成长也得到不少老师和家长的认可全新改版升级的南国习作正式亮相后许多忠实读者表示将一如既往地踊跃投稿一新征程更出彩丨河南今年将再创建13个国家区域医疗中心郑大三附院生殖医学科专家联合诊疗,为患者提供专属治疗方案。受访者供图大河报豫视频记者郑超3月5日上午9时,第十四届全国人民代表大会第一次会议在人民大会堂举行开幕会。国务院总理李克强在歌唱中传承在实践中升华红网时刻新闻通讯员常红长沙报道奶奶说雷锋最善良,好事做了一箩筐,妈妈说雷锋好榜样,教我把赞美歌儿唱,我要画张雷锋像,日日夜夜挂墙上,我要学做小雷锋,助人为乐,天天向上育英第二小学合越活越年轻的人,都有这个好心态每个人的身边都有一些活得很洒脱的人,任谁见了都忍不住赞一句太酷了太让人羡慕了。因综艺再见爱人2出圈的的麦子就凭借洒脱的性格圈粉无数。她做事情很少内耗,几乎都是想到了就毫不犹豫地去做河南夫妇因太会布置而走红,把120家装得堪称教科书,太高级了河南夫妇因太会布置而走红,把120家装得堪称教科书,太高级了现在无论是社会压力,工作压力,生活压力都大,真的很需要一个温馨的避港湾。家就是疗伤治愈的地方,情绪再失落回家后便可以全身这就是信心聚焦海外订单黄花菜生猪衡阳农产品走出国际范儿来源红网时刻新闻编者按开局之年,信心比黄金更重要。闯创干湖南热情奋战,一大批敢闯敢干的外贸企业一派繁忙生产线上,订单产品赶工正忙,等待发往全球,海外订单纷至沓来。湖南正以更强的信心为什么Apple所有产品都带有贴纸?无论您购买的是iPhoneMacBook还是iMac,您都会发现它们都带有Apple贴纸。这让人们想知道为什么。这就是我现在要解释的内容。因为,Apple拥有世界上最忠实的粉丝群之留一份闲情与花草为伴,存一份静气容纳悲欢三月春暖,好日常在,阳光正好,微风不燥。要相信,一定会有一束光照亮你,朝着光走吧,没有过不去的坎儿。希望这个爱哭爱笑爱瞎想的女人,调整好心态,想开,看淡,不为难自己,别盲目较劲,很旅行是一场艳遇,最后我们遇见了自己(川藏公路篇)7此刻灯光是暧昧的昏暗,米黄色的光线。洒落在晓彤的身上。我们没有出声。静静环抱着她,静静感受着彼此的心跳,此时的无声,更显暧昧。此刻窗外星空万里沁人心脾。窗内是越来越急促的呼吸声。我
遇见你,有欢喜,有心痛,想念你,有幸福,有伤感头条创作挑战赛时间悄悄流逝,有多少人,成了笔下的故事,写下太多的思念,只为了能让你看见,心里想念着你,这个冬天不会感受到严寒。遇见你,有欢喜,有心痛,想念你,有幸福,有伤感,阳光正周鹏升至CBA历史总出场次数榜榜首深圳力克上海终结对手3连胜北京时间1月13日11时,202223赛季CBA常规赛第25轮,上海队对战深圳队。历经一番角逐,深圳队11299力克上海队从而终结了对手3连胜势头。此役战罢,周鹏CBA生涯总出场次顾全4记三分,萨林杰22分,王哲林低迷,深圳六人上双力克上海!北京时间1月13日1100点,CBA常规赛迎来上海与深圳的三番战,前两战两队平分秋色,此役上海全员低迷,而深圳多点开花,最终深圳拿下比赛。首节,沈梓捷率先攻进,顾全三分射进,王哲林上海球迷想念刘铮,疲惫上海不敌深圳,李春江想提前放弃?202223赛季CBA第26轮比赛,上海对战深圳。这是本赛季两队第三次交手,也是常规赛最后一次,此前交手两队互有胜负打成平手。上海队目前胜场领先深圳两个,所以本场比赛深圳势在必得,谁赞成谁反对?大公主HHH及其他WWE官员反对公司出售!前几天,文斯麦克曼重返了WWE董事会。最近,据透露,文斯麦克曼想要出售WWE,并正在为WWE寻找可能的买家。文斯麦克曼回到WWE后,斯蒂芬妮麦克曼宣布辞职并离开WWE。后来,文斯麦谦虚!非洲选手战胜国乒名将,盛赞对手优秀,曾多次打败世界冠军乒乓球WTT南非德班挑战赛正火热进行,在男单的首轮较量中,国乒名将孙闻惨遭暴击,大比分13输给了非洲一哥尼日利亚选手阿鲁纳。不过在比赛结束后,阿鲁纳非常谦虚地盛赞对手很优秀,同时祝好消息恶意撞人致5死13伤的司机可能被判死刑,这回他笑不出来了1月11日17时25分,广州天河路体育东路口发生一起车祸,一辆宝马车连续6次恶意撞击行人,目前已经造成5人死亡,13人受伤。最新消息传来2023年1月14日,广州市检察机关依法以涉大麦植发冲击植发第二股,高毛利低净利能走多远?作者丨魏笑编辑丨孙超逸继容貌焦虑身材焦虑后,脱发焦虑正席卷年轻人。此外,值得注意的是,继咳嗽失眠脑雾后,近日脱发也成为人们热议的新冠后遗症之一。年轻群体的头发焦虑也带动了植发赛道迅西超杯4淘汰贝蒂斯将与皇马争冠北京时间1月13日凌晨3点,西班牙超级杯第二场半决赛在沙特进行,巴塞罗那对阵皇家贝蒂斯。上半场,登贝莱助攻莱万破门下半场,费基尔扳平比分,90分钟两队打成11。进入加时赛,法蒂为巴全明星投票第二轮结果詹姆斯力压KD蝉联票王,塔图姆反超恩比德NBA公布了全明星投票第二轮结果勒布朗詹姆斯以482万5229张票蝉联票王,凯文杜兰特450万9238张票领衔东部所有球员。西部前场詹姆斯(482万5229张)尼克拉约基奇(344足协杯发现国足大问题,第一国门竟然一个点球都扑不出来北京时间1月11日下午1630,足协杯半决赛,上海海港对阵浙江。第10分钟,伊萨卡隆在无对抗情况下受伤倒地,随后他被冯劲替换下场。第32分钟,武磊下底传低平球,吕文君的射门被浙江后