新写的Android应用里,要将数据保存到数据库中,然后通过ContentProvider来访问。
这就要创建各个数据库表、每个表中的列,数据库创建好后还要根据每个表来创建一个对应的ContentProvider Uri访问函数。数据库表有点多,有9个,又要一个又一个枯燥无味的复制、粘贴、修改(表名、列名、Uri type 等)。
忽然想到,应该有闲人做了工具,用来自动生成ContentProvider相关代码,我只要把数据库设计好就行了。于是开始Google,于是找到两个工具:
SQLite Expert Personal Edition
SQLite Expert的功能比较好,可以用来设计SQLite数据库,它的帮助文档也很详细。其Personal Edition是免费的,Professional Edition是收费的,我等穷屌丝用Personal Edition就行了。
Android ContentProvider Generator
这个东东用来生成ContentProvider相关代码,很方便,很简单。唯一麻烦的是,它的输入文件都是JSON,需要手动从数据库的SQL语句转成JSON配置,当然也可以写一个脚本来干这个事情。我这次的开发所用到的数据库表不多,所以就手动修改了。
需要注意的是
- 数据库表的JSON配置文件里,不需要指定 id 字段,最后生成的代码里会自动为每张表增加 _id 字段;
- 如果有FOREIGN KEY要REFERENCES其他表的 _id 字段,直接写成类似下面的例子即可,其中 "name" 的值可以随便取:
"constraints": [ { "name": "peoples__companys", "definition": "FOREIGN KEY (company_id) REFERENCES companys (_id) ON DELETE CASCADE ON UPDATE CASCADE" } ]
- 最后生成的代码里,会把表名、字段名存成相应的变量名,但可悲的是,JSON配置里的 "constraints" 里的表名、字段名却没有自动替换,只是简单的转成大写。这个bug就需要我们自己手动修改了。希望Android ContentProvider Generator下一版本能够修正这个BUG。