中药速查APP开发日记(1):安卓应用程序与数据库规划
本系列文章将介绍如何开发一个用于中药查询的安卓应用程序,不论是编程爱好者或者中医爱好者都可以看看,这是一个未完成的项目我一边开发一边写,你可以把文章当做安卓编程入门教程来读,中医爱好者如果对开发过程不感兴趣可以等到项目完成后通过电子邮件或其他方式索取APK。
近年自学中医却自觉记忆力跟不上,看药方大部分药物功效能知道个大概,但久了再翻书发现好多细节已经在不知不觉中遗忘了。查药物资料可以通过书籍可以通过网络,但是平时书籍和PC不一定带在身上,而电子书籍查询效率低,于是心里有个念头就是开发一个手机用的APP把药物按自己的需求组织起来,不要求全面只要能快速获取自己想要的东西就行。
想了想我的需求其实很简单:1、我的应用场合是在看实体书或电子书的时候快速查一下,或者无聊的零碎时候翻下,所以要求信息量要精简;当然如果你要用在分析或开药方的场合,需要更详细的参考信息自行修改数据就行。2、查询方式要求要简洁快速而且支持多种查询方式:比如按字母、功效等分类药物进行点选;输入药物首字母(名称)并支持模糊查询,比如可以输入麻黄、麻、黄、mh、 m,重名的罗列出来直接点选即可。3、信息展示部分这要看你对这个APP的要求,我只想用最短的时间获得最精要的信息,如果你想用做中药资料库那么就需要扩充更多的功能模块和录入更多的资料。4、有个数据库管理后台可以自行添加、删除、编辑药物信息。
对应用程序我们心里有了大概规划,下面我们再来规划一下数据库。我们不需要网络服务,安卓平台已经自带了 SQLite 数据库引擎,所以我们直接用 SQLite 数据库就好。接下来我们并不需要马上进入项目开发阶段,我们必须在数据库规划好并完成数据的初始化后才进行下一步。
因为数据库我们会在首次运行APP的时候通过代码直接创建,所以这里我们假设已经创建了一个 Sqlite 数据库,接下来只需专注于数据表的创建就行。而这是个小项目我们尽量精简,那些非必要的零碎数据表比如药物类别等则以数据集的方式写在程序里就行。我们首先创建数据库主表:
CREATE TABLE Medicine(
MedicineID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
Name NCHAR(20) NOT NULL,
Keyword CHAR(20) NOT NULL,
Alias TEXT NULL,
Category TEXT NULL,
HCValue TEXT NULL,
TasteValue TEXT NULL,
Usage TEXT NULL,
Price REAL NOT NULL DEFAULT 0,
Avoid TEXT NULL,
Intro TEXT NULL,
Detail TEXT NULL,
URL TEXT NULL,
Picture TEXT NULL
);
简单分析一下:CREATE TABLE Medicine 表示创建 Medicine 数据表;MedicineID 为自增长的 ID 字段,这是药物的唯一标识一般数据表都会存在这样一个 ID 字段,一是方便查询二是方便与外部数据表关联;Name 为药物名称,NCHAR(20) 表示长度为20的双字节字符串,其实字符串 SQlite 用 TEXT就行,只是有些控件你自动绑定的话这种识别为单行文本框,TEXT就识别为多行文本框,后面 NOT NULL 表示非空;Keyword 为关键词比如麻黄这里就用 MH 来表示,CHAR(20) 表示长度为20的单字节字符串;Alias 为别名,多个别名可以用分隔符隔开, NULL 可空;Category 为分类;HCValue 为药性;TasteValue 为药味;Usage 为用量;Price 为参考价格,REAL为浮点数类型,因为药价是浮动的你也可以修改为两个字段一个为 MinPrice 一个为 MaxPrice 或者直接用文本字段也行,设计这个字段是因为个人需要参考下市场价格,太贵的药咱开了也吃不起,这年代中药市场早就变味了不是吗;Avoid 为使用禁忌;Intro 为简介;Detail 为详细信息,如果你想设计成图文并茂的那么你需要自行定义数据结构在外部程序解析输出即可;URL为参考网页,可以输入多个网址并用分割符隔开;Picture 是参考图片,可以多文件并用分割符隔开。上面提到字段的只是大概规划,部分关联功能也不一定会开发而开发过程也可能不断修正,所以结果以最终成品为准。当然你也可以把它作为参考建立属于自己的数据库。
在创建数据库并生成数据表后,我们试着插入一个样本数据:
INSERT INTO Medicine (Name,Keyword,Alias,Category,HCValue,TasteValue,Usage,Price,Avoid,Intro) VALUES ('麻黄','MH','木麻黄、结力根、山麻黄、狗骨、卑柑','发散风寒','性温','味辛、微苦','2~9克',15,'体虚自汗、盗汗、虚喘及阴虚阳亢者禁服','发汗解表、平喘利尿');

用 Sqlite 工具测试我们刚才设计的SQL语句,运行结果如图所示。
L.Q.R 20210720