Android SQLite 升级数据库,在原有数据库的基础上添加一列

2018-02-04 23:46:16

1.原本以为很简单的问题,直接在原来创建数据库的语句中加上需要添加的列new_column,但是运行时发现,应用crash。原因是,原有数据库文件已经存在的情况下并不会重新创建数据库,也就是说此时数据库中并没有new_column列,这个时候,运行query()来查询数据库如果包括new_column列,就会导致应用crash。


2.其实,SQLite提供了数据库升级的方法 onUpgrade(),只需要在创建SQLiteOpenHelper对象时,传人比原版本号更大的版本号,便会触发该方法,在这个方法中可以实现迁移原有数据及创建新数据库Table。\


3.在某些情况下,数据库版本会出现降低的情况:如用户安装了版本更低的应用,但是应用数据没有改变。这种情况下,如果设计数据库时没有override onDowngrade()方法,会导致应用崩溃。所以,在设计数据库时,最好能override onDowngrade()方法,防止这种情况下应用崩溃的发生


  • 2018-01-17 01:55:49

    Android设置控件不可点击

    学会安卓控件的不可点击,再加上控件的透明度,估计你会做出不错的效果来。

  • 2018-01-17 15:58:16

    java实现定时任务的三种方法

    在进行多线程编程中,比较重要也是比较困难的一个操作就是如何获取线程中的信息。大多数人会采取比较常见的一种方法就是将线程中要返回的结果存储在一个字段中,然后再提供一个获取方法将这个字段的内容返回给该方法的调用者。如以下的ReturnThreadInfo类:

  • 2018-01-18 11:26:53

    浅谈js运行机制(线程)

    从开始接触js时,我们便知道js是单线程的。单线程,异步,同步,互调,阻塞等。在实际写js的时候,我们都会用到ajax,不管是原生的实现,还是借助jQuery等工具库实现,我们都知道,ajax可以实现局部刷新,并且在请求处理时,任然可以响应用户的操作,比如点击事件。不是说js是单线程吗?这些都是怎么实现的? 在阅读《深入理解Bootrap的源码》一书,在分析轮播组件(carousel.js)的源码时,作者对一句代码操作的注释引起了我的兴趣。