在项目中做了列表页面和详情页面,用到了以下几个知识点,在这里和大家分享一下:
1.数据库模块的完善:
1.1升级数据库,抽出版本字段;
如果xxx.db 数据库已经存在了,之后不管我们怎样Create database ,MyDatabaseHelper 中的onCreate()方法都不会再次执行。
解决这个问题的办法也相当简单,只需要先将程序卸载掉,然后重新运行,这时xxx.db 数据库已经不存在了,如果再点击Create database,MyDatabaseHelper 中的onCreate()方法就会执行,这时就可以成功了。
不过通过卸载程序的方式毫无疑问是很极端的做法,其实我们只需要巧妙地运用SQLiteOpenHelper 的升级功能就可以很轻松地解决这个问题。
还记得onUpgrade()方法吗?他就是升级数据库的关键,还记得SQLiteOpenHelper 的构造方法里接收的第四个参数吗?它表示当前数据库的版本号,之前我们传入的是1,现在只
要传入一个比1 大的数,就可以让onUpgrade()方法得到执行了。
如果多处读写数据库,一个个去改版本号常数就会很麻烦,这时抽出版本字段,一改全改就是必然。
public static final int DB_VERSION = 1;
更高阶的升级数据库玩法可以看看第一行代码:
细节:switch 中每一个case 的最后都是没有使用break的,
为什么要这么做呢?这是为了保证在跨版本升级的时候,每一次的数据库修改都能被全部执行到。比如用户当前是从第二版程序升级到第三版程序的,那么case 2 中的逻辑就会执行。而如果用户是直接从第一版程序升级到第三版程序的,那么case 1 和case 2 中的逻辑都会执行。使用这种方式来维护数据库的升级,不管版本怎样更新,都可以保证数据库的表结构是最新的,而且表中的数据也完全不会丢失了。
1.2使用SQL操作数据库和数据库查询:
虽然Android 已经给我们提供了很多非常方便的API 用于操作数据库,不过总会有一些人不习惯去使用这些辅助性的方法,而是更加青睐于直接使用SQL 来操作数据库。这种人
一般都是属于SQL 大牛,如果你也是其中之一的话,那么恭喜,Android 充分考虑到了你们的编程习惯,同样提供了一系列的方法,使得可以直接通过SQL 来操作数据库。
下面我就来简略演示一下,如何直接使用SQL 来完成前面几小节中学过的CRUD 操作。
添加数据的方法如下:
db.execSQL("insert into Book (name,author, pages, price) values(?, ?, ?, ?)",
new String[] { "The Da VinciCode", "Dan Brown", "454", "16.96" });
db.execSQL("insert into Book (name,author, pages, price) values(?, ?, ?, ?)",
new String[] { "The Lost Symbol","Dan Brown", "510", "19.95" });
更新数据的方法如下:
db.execSQL("update Book set price = ?where name = ?", new String[] { "10.99",
"The Da Vinci Code" });
删除数据的方法如下:
db.execSQL("delete from Book wherepages > ?", new String[] { "500" });
查询数据的方法如下:
db.rawQuery("select * from Book",null);
可以看到,除了查询数据的时候调用的是SQLiteDatabase 的rawQuery()方法,其他的操作都是调用的execSQL()方法。以上演示的几种方式,执行结果会和前面几小节中我们学习的CRUD 操作的结果完全相同,选择使用哪一种方式就看你个人的喜好了。</