项目实战:自定义ListView、数据库操作和Activity交互

在项目中做了列表页面和详情页面,用到了以下几个知识点,在这里和大家分享一下:

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 操作的结果完全相同,选择使用哪一种方式就看你个人的喜好了。</

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值