版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE2毕业设计学生姓名袁新燕学号08250239专业班级通信(2)班指导教师胡莉、王维芳学院计算机与通信学院答辩日期2012.6.11PAGEPAGE73 摘要本文设计了基于Android平台的电子词典软件。此英文词典包括两部分,一部分是离线的英文词典,一部分是在线的英文词典。离线的英文词典主要是使用Android自带的轻量级数据库SQLite来保存单词信息,系统通过SQLite数据库的query方法来查找到与指定英文相对应的单词的中文释义。在线的英文词典是利用oracle数据库来保存单词信息,然后利用Http协议解析出单词信息显示到手机界面上,同时还能够增加、删除、更新单词信息。当然,对于查询到的生疏的单词可以添加到单词本以便于随时复习。关键词:Android,oracle数据库,SQLite数据库,英文单词AbstractInthispaper,wedesignandimplementationaboutelectronicdictionarysoftwarewhichisbasedontheAndroidplatform.Englishdictionarymainlyincludetwoparts,andoneistorealizetheofflineEnglishdictionary,theotheristorealizetheonlineEnglishdictionary.OfflineEnglishdictionaryismainlyusedalightweightdatabaseSQLitethatbelongstoAndroidtopreservewordsinformation,wefindthespecifiedEnglishwordcorrespondingtotheChineseinterpretationbyusingquerymethodofSQLitedatabase.OfflineEnglishdictionaryuseanoracledatabasetosavethewordinformation,andthenparseoutthewordinformationtodisplayinthemobilephoneinterfacebyHttpprotocol,atthesametimetherehavethefunctionsthatisusedtoincrease,delete,updatewordinformation.Ofcourse,wecanaddunfamiliarwordtothenoteofwordinordertoreviewatanytime.Keywords:Android;oracledatabase;SQLitedatabase;Englishwords目录第1章绪论 1第2章系统需求分析 32.1软件的功能要求 32.2需求分析 32.3功能需求(用例图分析) 42.3.1基本功能需求例图 42.3.2离线词典的例图 62.3.3在线查询用例图 72.3.4添加到单词本的用例图 82.4系统结构图和流程图 102.5系统界面需求 142.6运行环境 152.6.1关键技术 152.6.2运行环境 16第3章数据库的设计 173.1在线词典的服务器端的数据库设计 173.1.1数据库中数据表的设计 173.1.2在线词典的客户端的数据库设计 183.1.3离线时的数据库的设计 193.1.4软件数据模型 203.2连接数据库 213.2.1数据库的创建 213.2.2.数据库的操作 213.2.3数据的查看 223.2.4服务器和客户端的连接 23第4章环境的搭建 244.1关于Android的简单介绍 244.1.1Android环境的搭建 244.1.2Android命令行的使用 254.1.3Android工程的简单介绍 264.2JavaWeb环境的搭建 29第5章具体功能模块的设计 335.1查询模块的设计 345.1.1离线查询 345.1.2在线查询 365.2添加单词模块 375.3删除单词模块 385.4修改单词模块 395.5菜单模块的实现 405.6生词本模块的设计 44第6章系统测试与性能分析 466.1测试 466.2性能测试及分析 47总结 48参考文献 49附录一:英文翻译原文 50附录二:英文翻译译文 58附录三:程序清单 66致谢 73第1章绪论 如今,英语在人们的工作、学习中显得越来越重要,而手机词典软件的出现无疑带来了极大的便利,遇到遇到生疏的英语单词,现在拿起手机就能轻松解决。近两年,谷歌android手机系统日益盛行,支持该系统的应用软件日益增多,自然手机词典软件也不例外。纵观web网的发展,从21世纪初基于web网的应用开始逐步引入中国到现在基于web网的应用发展的如此火爆。基于android手机系统的应用也将成为未来我国网络行业的发展潮流。据我们调查2007年11月5日,Google与其他33家手机制造商(包括摩托罗拉、宏达电、三星、LG)、手机芯片提供商、软硬件提供商合作。电信业者所联合组成了开发手机联盟,发布了“android”的开发手机软硬件平台。而这平台的软件与其他手机平台受手机型号的影响相比,android完全可以通用。基于 ①据台湾媒体报道,一位分析师称,作为苹果iphone在今年假日季节到来之时的竞争产品,美国最大的移动电话制造商摩托罗拉的智能手机Droid自09年11月6日通过VerizonWireless推出以来,其销售量已经达到80万部。 ②纽约RBCCapitalMarkets公司分析师马克·休(MarkSue)周日在一份研究报告中表示,该数字将使得摩托罗拉在第四季度按计划实现销售100万部目标可见基于android操作系统的手机的发展很快,这也是我们为什么首先基于android平台开发这款软件的原因。 另外电子词典作为我们学习和生活的重要部分,对于很多英语不好的学生或上班族们,特别是在北、上、广、深,这种一线城市的工薪阶层们,随时都会遇到国外的同胞,或者随时都有可能到国外去深造,如果随身没有一个英汉互译的软件,可能会难以同别人交流,因此推出一款好的电子词典软件是很有必要的,个人认为开发一款大众化的手机电子词典软件显得很有必要,特别是对于受教育程度较低和没有任何相关专业知识的人群,意义显得犹为突出。 现行软件技术发展迅速,各种类型的软件更新速度快,手机电子词典已经不是什么有创意的软件了,而是一类实用的软件。正因为其具有实用性,各个手机软件开发者都已经开发出来了基于各种手机系统的电子词典软件。而基于android系统的电子词典软件也已经出现, 此软件就是基于Android平台开发的,具有操作简单,适合大部分人群使用。在设计出本软件之前,我们首先做了充分的市场调查,了解基于android平台的电子词典软件的现状,了解大部分人对手机电子词典软件在界面上和功能上的要求,然后进行了细致的软件需求分析,进行软件的整体结构设计,确保软件中的任何一个功能点都是有意义的,接着开始软件的实施,将项目分成多个模块,完成各个具体的功能,最后当整个软件完成后,我们对软件进行专业测试,确保软件能正确的运行。在设计该软件时,我们将该软件定义为CS结构,这样即使在手机不能接入网络的情况下软件的各项功能还是能照常使用,在设计代码时,我们采用常用软件开发中常用的MVC模式,将操作界面和业务逻辑进行分离,降低代码的藕合度,便于软件的升级和维护,而这一思想也正好和android工程的程序结构相符,因为在android软件开发中,界面完全可以以xml的形式设计而不需要进行任何的硬编码,在软件的具体功能实现时,使用android布局技术完成UI的设计,使用android数据存储技术sqlite完成底层数据的读写。软件最终现的功能除了精确查询,模糊查询,生词本等常用的功能外,还加入了独特的记忆单词提醒、数据备份和恢复等功能。 在本论文中,各章主要介绍的内容如下:第2章主要介绍了电子词典软件的系统需求,第3章主要介绍了数据库的设计,第4章主要介绍了本软件中用到的语言环境的搭建,第5章主要介绍了此软件的各个模块的具体功能的实现。
第2章系统需求分析2.1软件的功能要求 经过以上详细的用户调查,在现行业务流程和数据分析的基础上,基本可以确定系统设计必须达到的目标了。根据软件工程的原理,需求分析的任务是确定系统必须完成的工作,也就是对目标系统提出完整、准确、清析、具体的要求。在经过了多方的调查了解后,就可以确定电子词典的功能需求。以下是电子词典系统具备的功能: =1\*GB3①设有主菜单选项界面,供用户选择要执行的操作。 =2\*GB3②设有增加单词界面,管理员可以添加单词和单词解释。 =3\*GB3③设有更新单词界面,管理员可以更新某个单词的解释。 =4\*GB3④设有删除单词界面,管理员可以删除某个单词。 =5\*GB3⑤设有单词查询界面,用户可以查询某个单词的解释或者进行模糊查询。 =6\*GB3⑥设有生词本管理界面,用户可以查看生词本中的单词与解释。 =7\*GB3⑦设有单词解释显示界面,用来显示用户查询到的单词的解释。 =8\*GB3⑧设有设置界面,用户可以设置该软件的一些信息。 =9\*GB3⑨设有数据备份和恢复界面,用户可以将生词本中的数据方便的备份起来和恢复。2.2需求分析 在软件设计之前,我们要做的工作就是对电子词典的流程,操作等,做出详细的调查,从而了解系统需要实现的功能。系统在开发过程中,经过比较长时间的设计阶段,可以说模型贴近生活,有很大的现实意义,一般学生或者上班族一般都都能较方便的使用本软件,考虑到软件本身具有较强的专业性,而这些知识普及率毕竟有限,所以在程序设计过程中一直遵循实际应用的原则。因此它的操作界面会尽可能的简单,明了。各种控件的布置也会非常的清晰,使用的控件种类不会太多且对控件的操作不会太复杂。这样就能让不参与该软件设计的人也能够熟练的更好的使用。 根据用户查询单词和记忆单词的要求,和记录数据的一些习惯,该软件实现后,能达到以下目标:界面设计友好、数据存储安全,可靠。基本的设置保证单词查询功能。保证数据查询的灵活性。对增加、删除、修改,查询的信息进行精密设计,保证能及时处理信息。此软件包括两部分的设计,第一部分是离线的单词查询,Android自带的轻量级数据库SQLite来保存单词信息,系统通过SQLite数据库中保存的单词信息来查找到与指定英文相对应的单词的中文信息。实现这样一个英文词典需要解决一系列技术问题。例如,如何将保存英文单词信息的数据库随程序一起发布;发布后如何打开数据库;如何在输入前几个字母后,在AutoCompleteTextView组件提示裂变中显示以所输入字符串开头的所有单词。 在线的英文词典在设计该时,我们将该软件定义为CS结构,即使手机不能接入网络但是软件的各项功能还是能照常使用。在设计代码时,我们采用常用软件开发中常用的MVC模式,将操作界面和业务逻辑进行分离,降低代码的藕合度,便于软件的升级和维护。在软件的具体功能实现时,使用Android布局技术完成UI的设计,使用oralce数据库保存单词的基本信息,使用Android数据存储技术内置的小型嵌入式数据库sqlite完成底层数据的读写。同样在线英文词典也要解决一系列的技术问题。例如,如何将保存在oracle数据库中的单词信息解析出来,如何把选中的英文单词保存在手机上轻量级数据库中以及如何把保存在手机数据库中的单词信息查询出来。2.3功能需求(用例图分析)根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需并且使用用例图来描述,系统的功能需求,我们分为以下几个本分分别描述:基本功能需求例图,离线词典的功能例图,在线词典的功能例图,单词本的共能例图。各个例图分别简单的描述了各个部分的基本功能和简单的实现。2.3.1基本功能需求例图图2.1系统的基本功能例图其中各个部分的详细功能描述如下表所示 表2.1查询功能表用例名称查询参与者用户目标从手机数据库中或者从服务器端的数据库中查询单词前置条件程序启动基本事件流点击查询按钮查询
表2.2添加到单词本功能表用例名称添加到单词本参与者用户目标把查询到的单词添加到单词本中前置条件已经查到单词基本事件流点击添加按钮添加到单词本表2.3发音功能表用例名称发音参与者用户目标使查询到的单词发音前置条件单词已经成功查询到基本事件流点击发音按钮使单词发音2.3.2离线词典的例图图1.2离线的词典的基本功能例图其中各个部分的详细功能描述如下表所示表2.4离线查询功能表用例名称离线查询参与者用户目标从手机数据库中查询单词前置条件切换到离线词典基本事件流1点击离线词典2输入单词后点击查询按钮2.3.3在线查询用例图图2.3在线词典的基本功能的例图其中各个部分的详细功能描述如下表所示表2.5离线查询功能表用例名称在线查询参与者用户目标从服务器端的oracle数据库中查询单词前置条件程序启动基本事件流1切换到在线查询2输入单词点击查询表2.6离线查询的菜单的功能表用例名称菜单参与者用户目标从客户端添加,删除,更新单词前置条件已经切换到在线查询基本事件流1点击菜单按钮2点击添加进行添加3点击删除进行删除4添加更新进行更新2.3.4添加到单词本的用例图
图2.4单词本的基本功能例图其中各个部分的详细功能描述如下表所示表2.7添加到单词本的功能表用例名称添加到单词本参与者用户目标将查询到的单词添加到单词本前置条件单词已经成功查询到基本事件流点击添加按钮添加
表2.8显示添加到单本的单词用例名称显示添加到单词本的单词参与者用户目标显示添加到单词本的单词前置条件单词已经成功添加到单词本基本事件流1切换到单词本2单击上一个显示上一个单词3单击下一个显示下一个单词4单击播放播放添加到单词本的所有单词2.4系统结构图和流程图此软件主要分为两部分来实现,一部分是离线的英文词典,一部分是在线的英文词典。离线的英文词典主要是使用Android自带的轻量级数据库SQLite来保存单词信息,系统通过SQLite数据库中保存的单词信息来查找到与指定英文相对应的单词的中文信息。实现这样一个英文词典需要解决一系列技术问题。例如,如何将保存英文单词信息的数据库随程序一起发布;发布后如何打开数据库;如何在输入前几个字母后,在AutoCompleteTextView组件提示裂变中显示以所输入字符串开头的所有单词。在线的英文词典在设计该时,我们将该软件定义为CS结构,即使手机不能接入网络但是软件的各项功能还是能照常使用。在设计代码时,我们采用常用软件开发中常用的MVC模式,将操作界面和业务逻辑进行分离,降低代码的藕合度,便于软件的升级和维护。在软件的具体功能实现时,使用Android布局技术完成UI的设计,使用oralce数据库保存单词的基本信息,使用Android数据存储技术内置的小型嵌入式数据库sqlite完成底层数据的读写。同样在线英文词典也要解决一系列的技术问题。例如,如何将保存在oracle数据库中的单词信息解析出来,如何把选中的英文单词保存在手机上轻量级数据库中以及如何把保存在手机数据库中的单词信息查询出来。 其中离线词典的主要的系统流程图如图2.5所示,在线词典的结构图和系统流程图分别如图2.6和2.7所示,系统功能结构图如图2.8所示:单词本单词本输入显示菜单选项设置帮助退出词典结束数据库操作数据库操作菜单显示返回上一个,下一个,联想主界面管理开始图2.5离线词典的系统流程图 说明:其中词典的部分分为在线的电子词典和在线的电子词典,在离线部分主要是对Android自带的SQLite数据的操作,即单词的信息是存储在SQLite数据库中的,我们所做的是如何把单词的基本信息从数据库中读取出来,并且存储到单词本。而在线词典的部分我们主要使用的是服务器端的oracle数据库,我们的首要工作就是如何把服务器端的数据库中的数据读取出来,显示在手机的界面上。此外还要单词本的中的单词信息的存储,在此处我们也是使用Android的SQLite数据库,而我们的播放单词的功能就是把存储在单词本的单词按照顺序播放。所以本软件很大以部分的工作是对数据库的操作。2.6在线词典的架构图(C/S) 在图2.6中主要针对C/S架构进行说明,所谓的C/S架构就是客户端和服务器端。我们把此软件的架构定义为C/S,最大的好处就是即使没有网络的情况下,我们仍然可以从服务器端的数据库中读取到我们的单词信息,只是因为我们通过web服务器发布了我们的服务器,构建了一个虚拟的网络资源。图2.7在线词典的系统流程图 在图2.7中我们主要的是针对在线的电子词典进行设计,涉及到的问题就是如何把服务器端的数据库中的单词信息读取出来然后显示在手机界面上。我们使用的是Http协议来解析,通过把单词信息解析到浏览器上,然后我们再通过post()和get()方法来解析浏览器上的信息。基于Android的电子词典基于Android的电子词典在线查询离线查询英汉查询设置单词操作数据安全性英汉查询单词操作设置发音单词本增加删除更新单词本发音上一个下一个播放上一个下一个播放图2.8系统功能结构图2.5系统界面需求 当今社会的生活节奏越来越快,随着硬件移动设备的越来越先进,人们对移动设备的要求也越来越高,从以前的追求技术到现在的追求视觉,因此,也逐步的提高了对系统的要求。因此设计的过程中应该注意界面的友好性以及客户的用户体验。图2.9是词典的用户界面:
图1.9电子词典用户界面 说明:在图2.9为默认的英文词典的主界面,在文本框中输入相应的单词或者汉字,点击查询按钮就能显示出相应的汉语释义或者英文单词。点击在线词典就会出现在线查询的界面,点击单词本就会显示添加到单词本中的单词。2.6运行环境2.6.1关键技术 本软件采用java作为开发语言,布局和数据存储是开发本软件的关键技术,布局用来设计用户交互界面,用户界面的设计是否美观和合理直接影响用户体验,因此运用好布局技术好是直接和用户相关的,而数据存储技术则记录了用户所有的操作数据和用户所需要提取的数据。在android中,软件UI通常使用xml技术设计,而xml中控年的位置和状态则离不开布局的使用,android中常用的布局有5种,分别是:AbsoluteLayout、LinearLayout、RelativeLayout、FrameLayout、TableLayout,由于布局的使用,并且布局之间可以互相嵌套,使得android软件UI的设计变得非常灵活,即使是一些非常复杂的界面设计,只要合理的使用布局,也会使开发变得很容易。 android中数据存储技术主要有:文件存储、preference、sqlite、ContentProvider和网络存储,在本软件中主要使用到了文件存储、sqlite,文件存储是以流的形式读写文件,可以以文格的格式,也可以以二进制的形式,在java语言中要使用流,则写入文件的对象必须进行序列化,sqlite是嵌入式移动设备中常用的轻量级数据库,可看作计算机上使用的sqlserver、oracle数据库。本软件中,用户生词本中的数据都存在sqlite数据库中,而进行数据备份和恢复时则是用文件作为介质保存数据。2.6.2运行环境操作系统:Android手机基于Linux操作系统支持环境:Android1.5-2.3.1开发环境:Eclipse3.5ADT0.95
第3章数据库的设计 数据结构组织和数据库文件设计要根据不同用途,使用要求等,来决定数据的整体组织形式等一系列问题。数据库,顾名思义,是存放数据的仓库。只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。数据库中的数据按一定数据模型组织、描述和存储,具有较小的重复度、较高的数据独立性和易扩展性,并且可以被在一定范围内的各种用户共享。在涉及数据库的软件开发中,需要根据有待解决的问题性质、规模,以及所采用的前端程序创建工具等,做出合适的数据库类型选择。3.1在线词典的服务器端的数据库设计 在线查询时需要把服务器端的oracle数据库中的数据解析出来。把单词库导入到oracle数据库。在本系统中采用了简易版的oracle,即数据库的名字为XE,首先要解决的是在该数据库里某个用户下创建表。3.1.1数据库中数据表的设计 在此软件中表的关系比较简单,只有一张单词表,其具体的设计为表3.1数据库中数据表的具体设计数据库名字XE表名b_dict字段名name,info 说明:name为单词的英文名称为数据表的主键,info为单词的中文释义不能为空。在DOS下创建数据表的具体步骤为: 安装oracle简易版的数据库之后打开DOS进行配置,配置Oracle的步骤为 (1)以oracle管理员的身份进入oraclesqlplus“assysdba”(2)启动oracle监听先退出exit;然后启动监听lsnrctlstart(3)创建新的用户首先以管理员的身份进入sqlplus“/assysdba” createusernameidentifiedbypassword;grantresourct,connecttoname; 注:以新的用户登录首先推出数据库exit;然后sqlplusname/password(4)修改当前的语言格式,默认为中文altersessionsetnls_date_language=english;(5)创建新的数据表、 createtableb_dict( namevarchar2(20)primarykey, infovarchar2(100)notnull );(6)查看数据表是否创建成功selecttable_namefromuser_tables;查看数据表的内容descb_dict;查看数据表的所有内容select*fromb_dict;将单词导入到数据库中insertintob_dictvalues(‘AD’,’/Ad/abbr.公元(后);耶稣纪元后’);图3.1数据表b_dict的内容3.1.2在线词典的客户端的数据库设计 客户端采用的是sqlite数据库,sqlite数据库是Android自带的小型数据库,可以将少量的数据存放在该数据库中。针对不同的用户的生词是不同的,可以很方便的将生词导入到数据库中,也可以很方便的将单词从数据库中删除。此软件中的数据表的关系也比较简单,只有一张表用来存放添加到单词本中的单词具体设计如下表所示:
表3.2单词本表的具体设计数据库名称sqlite.db表名dict字段名_id,title,body 说明:title:存放英文单词。body:存放相应的英文单词的中文解释。数据库定义为sqlite.db的原因是:android平台下采用的数据库是sqlite3,运行后生成数据库的名称.db文件.定义好的数据库可以直接导入到/data/data/com.briup.dictionary/databases/sqlite.db。这样生词本的数据就可以直接在模拟器中显示出来。建表语句为createtabledict (_idIntegerprimarykeyincrementby, titletextnotnull, bodytextnotnull); 在DOS下查看android下的数据库文件的内容如下:(1)cd/data/data/com.briup.dictionary/databases/sqlite.db(2)sqlite3sqlite.db(3).tables(4)select*fromdict;(5)将单词导入到数据库中,insertintob_dictvalues(1,‘AD’,’/Ad/abbr.公元;耶稣纪元后’);3.1.3离线时的数据库的设计 这里的数据库的设计和单词的单词表的设计基本类似,这里就省略一些详细的建表的过程而简单的给出设计的功能表。
表3.3离线时的数据库的设计表字段名数据类型_id数字english字符chinese字符3.1.4软件数据模型 建立系统数据模型的主要工具是实体—关联图,即E-R图。E-R图形符号约定如下表:表3.4E-R图图形符号表图形符号说明将属性连接到实体集或将实体集连接到联系集表示实体集合表示属性表示关系集根据上面的给出的E-R图的图形符号表的描述,画出的在线时的数据库的E-R分别如下:词汇单词单词解释图3.2在线时服务器端的单词表的词汇单词单词解释词汇词汇单词单词解释单词ID 图3.3在线时客户端的单词本中单词表的E-R图3.2连接数据库 在线时的服务器端用的Oracle数据库用来存储单词的基本信息(单词的名称和单词的中文释义),客户端用的是android自带的sqlite数据库。这里将首先介绍如何进行Android数据库连接,Android中自带SQLite数据库,这是一个十分小型的数据库,这样正适合Android这种移动平台使用。Android数据库存储的位置在data/data/<项目文件夹>/databases/目录下,Android是利用ContentProvider作为内容提供商,SQLiteOpenHelper数据库帮助类来进行对数据库的创建和操作。通过Context.getContentResolver()方法直接对数据库进行操作。程序中数据库类为DBHelperextendsSQLiteOpenHelper(继承关系),内容提供类DBProviderextendsContentProvide(继承关系)。其次介绍服务器端的数据库的详细设计,再介绍服务器端和客户端的数据库的连接。3.2.1数据库的创建 Android提供了标准的数据库创建方式。继承SQLiteOpenHelper,实现onCreate()和onUpgrade()两个方法,有个好处就是便于数据库版本的升级,连接数据库的算法见程序清单。数据库如果创建不成功则抛出FIleNotFoundException异常。服务器端数据库的创建主要是通过DOS利用命令进行创建的,详细的创建命令在2.1.1中已经详细的做了介绍,此处不再进行赘述。3.2.2.数据库的操作 Android对SQLite数据库的操作主要有插入、删除、更新、查询操作。但是前置条件是必须打开数据库。在这里打开数据库用的主要的方法是openForReadable()和openForWriteable(),打开数据之后才能进行相关的操作,其中插入单词的方法是insertWord(),删除单词的方法是deleteNote(),更新单词的方法是updateWord()。其详细代码见程序清单。注意:在操作完了数据库之后,需要对资源进行释放,这里就是对数据库资源进行关闭,关闭数据库的方法是close()。在服务器端的数据库同样有增加,删除和更新等操作,因为我们用在线电子词典时,需要把数据从服务器端通过URL读出来。因此我们用的是servlet来实现单词的增删改查。其中查询操作的介绍将在下面的3.2.3节数据的查看中详细的分析,这里不再赘述。3.2.3数据的查看 Android中程序是利用Cursor游标类指向数据表中的某一项,然后进行查询数据,用Log日志显示出来。查询时用的方法是数据库本身的查询方法query(),需要注意的是这个方法比较复杂,他有8个参数,因为它将一个完整的SQL语句拆成了若干个部分: 第一个参数table:表名,相当于SQL的from后面的部分。在此还要注意如果和多表联合查询时,就用逗号将两个表名分开,拼成一个字符串的table值。 第二个参数是columns,要查询出来的列名。相当于SQL的select后面的部分。第三个参数是selection,查询的条件,相当于SQL的where后面的部分,在这个语句中允许使用“?”,也就是说这个用法和JDBC中的PreparedStatement的用法相似。 第四个参数selectionArgs,对应于selection的值,selection有几个问号,这里就得用几值。 第五个参数groupBy,相当于SQL的groupby后面的部分。 第六个参数having,相当于SQL的having后面的部分。 第七个参数orderBy,相当于SQL的orderby后面的部分,如果是倒序,或者是联合排序,可以写成类似这样:StringorderBy=“iddesc,name”。 第八个参数limit,指定的结果集的大小,它和Mysql的limit用法不太一样,Mysql可以指定从多少行开始之后取多少条,例如,“limit100,10”,但是这里只支持一个数值。 注意:游标查询时,必须把Cursor移动到第一个位置,即moveToFirst(),因为每次查询时,游标都会从第一个往后查找,通常在查询数据库之前进行。此外,游标和数据库一样都要及时关闭,要不会出现异常。其详细代码见程序清单。在Oracle中查询用到的也是数据的query()方法,他用到的参数只有一个就是sql语句,sql语句的写法是sql=“selectsum(字段名)as别名from数据表where条件表达式,”例如Stringsql="select*fromb_dictwherename=?"。最后要执行sql语句,用法如下setrs=conn.excute(sql),用rs(别名)表示获取统计的值。3.2.4服务器和客户端的连接 服务器端和客户端的连接通过URL连接到浏览器,然后客户端从浏览器端把信息解析出来。此处主要的方法就是post()或者get()方法,一般用到的都是post()方法,下面简单介绍一下post()方法的参数极其参数的用法。post()方法有两个参数,第一个是url(统一资源定位符)相当于网址,第二个是封装的参数。其使用步骤是: 1创建HttpClient对象; 2根据实际需求创建HttpGet和HttpPost对象 3如果需要发送参数,调用setParams方法来添加请求参数,HttpPost对象可调用setEntity来设置。 4调用HttpClient的execute发送请求,返回一个HttpRequest。 5调用HttpResponse对象相关方法获取服务器的相应内容进行处理。
第4章环境的搭建 本软件在线词典的设计是C/S结构的系统,因此要先搭建服务器端,利用JavaEE中的servlet来提供服务,并将其部署在Tomcat下。需要解决的是创建不同的servlet来提供不同的服务。另外此软件是运行在Android平台下,所以需要搭建Android平台。4.1关于Android的简单介绍 任何事物要运行都要有它的环境,Android也要有它的环境才能够运行,下面介绍Android的开发环境的配置。4.1.1Android环境的搭建 搭建开发环境需要的软件: 操作系统:WindowsXP或Linux 软件包:AndroidSDK(SoftwareDevelopmentkitJavaDevelopmentkit)、ADT(AndroidDevelopmentTool)IDE环境:EclipseIDE+ADTEclipse3.3以上JDK:JavaRuntimeEnvironment虚拟机、(JDK)JavaDevelopmentkit 安装步骤如下: 第一步:安装Java虚拟机sun-java7-jdk版本 第二步:安装Eclipse3.5工具官网/downloads/选择版本(图4.1)进行安装。图4.1Eclipse的安装版本 第三步:安装AndroidSDK,首先要下载SDK,可以在这个网址下载/sdk,选择相应的系统进行安装。 第四步:安装AndroidADT插件,运行Eclipse,选择help->installnewsoftware选择add,将会弹出一个如图3.2对话框,点击OK,选择要安装的软件,然后next,选择接受协议,直到安装成功,重启Eclipse软件,设置AndroidSDKHome,window->refrence在SDKlocation中输入SDKTools路径:E:\android\android-sdk-windows点击OK这样Android的环境就已经搭建成功了。图4.2安装ADT4.1.2Android命令行的使用 1.创建AndroidVirtualDevice(AVD) 使用androidlisttarget命令列出当前可用SDK版本 androidcreateavd–n<name>-t<targetID>[-<option><value>] 2.模拟器Emulator的使用 启动和停止模拟器 emulator–avd<avd_name> 3.AndroidDebugBridge(ADB)的使用 查询当前模拟器实例数量 adbdevices 4.本地机器和模拟器之间相互拷贝文件 D:adbpushd:\tesst.txt/sdcard D:adbpull/sdcard/test.txtd:/ (1)安装apk应用程序 adbpushd:\test.apk/sdcard/ adbinstalltest.apk (2)使用shell命令 在DOS命令行输adbshell进入shell命令行 退出shell用exit4.1.3Android工程的简单介绍 Android系统将插件ADT集成到了Eclipse工具上,因此,一个Android程序启动后,系统会启动一个模拟器(Emulator),该模拟器是一款手机版的样式,拥有手机硬件的基本操作,我们可以右边的键盘通过代码属性设置将其隐藏,界面的大小可自由设定,目前最大支持800*600分辨率。 1.Android的工程程序的结构:Android工程基本结构目录包括:src(源代码),gen(Android系统自动生成的常量),res(资源文件):主要是存放程序界面的布局配置(.xml)文件和图片资源。AndroidMainfes.xml是Android四大组件的驱动配置文件,有它的存在,Android程序的四大组件才可以正常的跳转。Android资源的类型和布局如表3.1所示:
表4.1Android资源的类型和布局表目录结构资源类型res/animXML动画文件res/drawable一些图片文件res/layoutXML布局文件res/values各种XML资源文件arrays.xml:XML数组文件colors.xml:XML颜色文件dimens.xml:XML尺寸文件style.xml:XML样式文件res/xml任意的XML文件res/raw直接拷贝到设备中的原生文件res/menuXML菜单文件下图4.2和4.3为电子词典代码结构和个界面的配置文件,图像资源等,其中src为java的源代码,res/drawable为词典工程程序中用到的图片资源,res/layout为词典工程中用到的布局文件,res/values为工程中用到的各种XML资源文件,res/raw为工程中离线查询时用到的数据库资源。图4.2电子词典工程的结构图1 图4.3电子词典工程结构图2 2.Android工程的配置文件AndroidManifest.xml的介绍Android系统的任何一个程序启动都需要AndroidManifest.xml来启动程序,任何一个新建的工程目录都会自动生成一个AndroidManifest.xml文件,此配置文件时整个程序能够正常运行的核心,他里面包含了AndroidSDK的版本,程序运行的默认Activity,当程序中的任何一个组件触发事件后,系统都会自动的去AndroidManifest.xml中寻找标示来做出相应的操作。任何一个AndroidManifest.xml文件的格式都应为:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"android:versionCode="1"android:versionName="1.0"><application><activity><intent-filter><action/><category/></intent-filter></activity></application><uses-permission/></manifest> Android支持的编码是"utf-8",当程序中出现乱码是,我们须将其编码格式转化为"utf-8".在AndroidManifest.xml中会在第一行声明一句:<?xmlversion="1.0"encoding="utf-8"?>。在第二行定义了我们需要使用的架构,该架构来自xmlns:android="/apk/res/android"xmlns(XMLnamespace)是一个命名空间,它就像一条河的源头一样能让我们找到系统架构,每一个配置文件必须有这个xmlns,否则程序中的所使用的所有资源将无法找到。在application元素我们定义android:icon="@drawable/icon"android:label="@string/app_name",android:icon是程序在手机中显示的图片,我们运用@drawable/icon表示了对res/drawable目录下的icon.png的引用。@string/app_name表示了对res/value目录下string.xml中定义的app_name参数的引用。<activityandroid:name=".DemoDectionary"> <intent-filter> <actionandroid:name="ent.action.MAIN"/> <categoryandroid:name="ent.category.LAUNCHER"/> </intent-filter> </activity> 这是系统确定的首先要启动的Activity是DemoDectionary。在intent-filter选项中,有action和category等等属性,我们需要定义action的值为ent.action.MAIN,category的值为ent.category.LAUNCHER,它们是系统的值,程序在解析到这些常用后就可以确定首先要启动的Activity。当我们需要通过一个组件触发另一个组件时,我们将设定action和category的其它属性值,系统会根据我们设定的属性值去AndroidManifest.Xml的application中寻找标识,任何一个Activity的action和category是唯一,所以程序在任何时候都能唯一启动一个Activity,这样,不同的Activity之间的跳转就实现了。在AndroidManifest.Xml中有一个根结点<uses-sdk>,它是我们需要定义的ADT版本,例如我们将其值设定为android:minSdkVersion="4",则表示此Android工程所用的版本为1.6,Android还有1.1、1.5、1.6、2.0、2.1这几个版本。如果我们需要对网络进行访问,比如打开一个网页,刚我还需要设置一个网络访问权限uses-permission,将其的值设置为一下的形式,INTRENET为网络访问权限。android:name="android.permission.INTERNET,我们就可以访问网络了。当然我们的uses-permission还有很多其它的权限,例如GPS定位权限,浏览器数据存取权限为以下形式com.android.browser.permission.READ_HISTORY_BOOKMARKS等等。当程序的任何一个组件要用到时,都必须在AndroidManifest.Xml文件中声明。四大组件要使用前都需要声明,其声明方式如下:<service></service> <provider></provider> <activity></activity> <receiver></receiver> 其中声明provider时还需要声明其授权authorities。每个组件里面还有很多的属性,会根据程序的具体需要定义不同的属性。4.2JavaWeb环境的搭建 本软件是C/S结构的系统,因此要先搭建服务器端,利用JavaEE中的servlet来提供服务,并将其部署在Tomcat下。需要解决的是创建不同的servlet来提供不同的服务。Web服务的名称:DictionaryService,在myEclipse中新建一个webproject,取名为DictionaryService,其结构如下图:图4.4Web结构图com.briup.jdbc是CVM模式中的低层,数据库层,包中的类是用来连接数据库和操作数据库的,其中JDBCConnectionFactory.java用来连接数据库。privatestaticStringurl;privatestaticStringuserName;privatestaticStringuserPwd;连接数据库需要这三个值,而这三个值放入到dbFile中,通过Properties来获取。然后通过连接工厂方法。Connectionconn=DriverManager.getConnection(url,userName,userPwd),com.briup.service是CVM模式中的service层,为用户提供服务。com.briup.service是CVM模式中的Dao层,为service提供服务,封装对数据库的操作的方法。com.briup.servlet包中就各个不同的Servlet类,其具体情况如下:提供模拟查询的servlet是QueryDictsServlet,重写其中的doGet()和doPost()方法,该servlet来处理模拟查询的功能,并接收要匹配的字符串,参数为name,其0:8888/DictionaryService/servlet/querydictsservlet?name=BC;提供查询的servlet是QueryDictServlet,重写其中的doGet()和doPost()方法,该servlet来处理确认查询的功能,并接收要查询的字符串,参数为name,其url为:0:8888/DictionaryService/servlet/querydictsservlet?name=BC;提供删除单词的servlet是DeleteDictsServlet,重写其中的doGet()和doPost()方法,该servlet来处理删除单词的功能,并接收要删除的字符串,参数为name,其url为0:8888/DictionaryService/servlet/deletedictservlet?name=BC;提供更新单词的servlet是UpdateDictServlet,重写其中的doGet()和doPost()方法,该servlet来处理修改单词的功能,并接收要修改单词的字符串,参数为name,其url为0:8888/DictionaryService/servlet/updatedictservlet?name=BC;提供增加单词的servlet是AddDictServlet,重写其中的doGet()和doPost()方法,该servlet来处理增加单词的功能,并接收要增加单词的字符串,参数为name,其url为0:8888/DictionaryService/servlet/adddictservlet?name=BC;提供查询的servlet是QueryServlet,重写其中的doGet()和doPost()方法,该servlet来处理查询所有单词的功能,不需要接收任何参数,其URL为:0:8888/DictionaryService/servlet/queryservlet。要测试是否连接成功可以打开任意浏览器,输入上面的url,如果能够正确的解析出来服务器端的信息,表示连接成功。如图是输入查询的url时出现的信息:此信息是以xml的信息表示的,第一行表示xml的版本信息以及所用到的编码格式,在下面是根节点response,其中包含两个子节点message和dict,而dict中又包含了两个子节点dictName和dictInfo,需要主要的是message是对服务器端是否解析成功的标注,也可以不要此节点,但是根节点必须存在。实际上我们从浏览器解析信息的时候就是通过各个信息的节点进行解析的,此处可以使用两中解析方法,一种是SAX解析,但是此解析主要针对的是大批量的数据解析,我们这里用到的信息只是单词的基本信息,没有必要使用它。因此我们使用的是针对小批量处理的DOM解析。图4.5从浏览器解析到的查询信息如上图如果要解析出单词的英文名字(english)和中文释义(chinese),其解析方法步骤为:第一步:创建Document的工厂实例DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();第二部:实例化DOM解析器parser=factory.newDocumentBuilder();Documentdocument=parser.parse(InputStreamis);第三步:开始解析NodeListdict=document.getElementsByTagName(“dict”);Stringenglish=dict.item(0).getFirstChild.getNodeValue();StringChinese=dict.dict.item(1).getFirstChild.getNodeValue();
第5章具体功能模块的设计搭建好了环境,当我们的服务器端设计好了,在开始设计客户端。在设计客户端的时候,需要注意两个方面,一个是数据库的设计,一个是各个功能的布局。客户端是在Eclipse中新建一个androidproject工程,工程名为Dictionary,它的结构如下图所示:图5.1电子词典的工程结构图在com.briup.Dict.util包中的MyDatabaseHelpter类和MyDatabaseServer类是用来创建数据库和封装对数据库的操作。因为sqlite是内嵌在手机中,因此是创建数据库和表的时候,可以通过来创建。在com.briup.dictionary包中是每一个界面的类都在此包中,详细情况:DictDemo.java是主界面,该界面实现主要的布局方式。DictionaryDelete.java是删除单词的界面。DictionaryDialog.java是单击单词时进行选择的界面。DictionaryEdit.java是增加单词的界面。DictionarySearch.java是查询单词的界面。DictionaryShow.java显示单词和单词解释的界面DictionaryUpdate.java更新单词的界面DictNotesListActivity.java生词本的界面HelpActivity.java帮助界面PlayActivity.java联想记忆的界面SettingView:设置界面在此软件中,主要分为两部分,一部分是离线查询,另一部分是在线查询。下面就这两部分的各个模块功能的设计进行详细的分析。5.1查询模块的设计查询功能就是要查询的单词的中文释义显示到界面上。它分为在线查询和离线查询。离线查询就是在不借助网络的情况下,直接从手机的SQLite数据库当中读取单词文件,从而显示在界面上。而在线查询需要我们借助于网络,从服务器端的数据库当中把数据解析出来从而显示在界面上。5.1.1离线查询在离线查询时,我们首先要解决前面提出的主要技术问题,即如何将保存英文单词信息的数据库文件随程序(apk文件)一起发布;发布后如何打开数据库;如何在输入前几个字母后,在AutoCompleteTextView组件提示列表中显示以所输入字符串开头的所有单词。下面我们将逐一的解决这些问题。1如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?在此软件中我们使用的是以将dictionary.db文件复制到EclipseAndroid工程中的res/raw目录中,所有在resaw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。2如何将res/raw中的数据库文件打开? 在Android中不能直接打开res/raw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res/raw目录中资源的InputStream对象,然后将InputStream对象中的数据写入其他的目录中相应文件中。在AndroidSDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。在本软件中实现的英文词典中使用openDatabase方法来打开数据库文件(该文件在SD卡的dictionary目录中,因此,要想运行本文实现的英文词典,需要在手机或模拟器中需要安装SD卡)。如果该文件不存在,系统会自动创建/sdcard/dictionary目录,并将res/raw目录中的dictionary.db文件复制到/sdcard/dictionary目录中。其具体代码如程序清单所示。3.如果在AutoCompleteTextView组件中输入两个及以上字母时显示以所输入字符串开头的所有单词列表?AutoCompleteTextView所使用的Adapter是一个自定义的Adapter类。要注意的是,不能将整个数据库中的单词都查出,然后生成一个Adapter对象再使用setAdapter方法来设置AutoCompleteTextView组件的Adapter对象。AutoCompleteTextView组件不会为我们筛选以某个字符串开头的单词。这些工作需要通过编码来实现。基本思路是在AutoCompleteTextView类的afterTextChanged事件中监视AutoCompleteTextView组件中字符的输入情况,每当输入一个字符时就生成一个Adapter对象,然后将新生成的Adapter对象与AutoCompleteTextView关联。显示以输入字符串开头的单词列表的效果如图5.2所示。
图5.2单词列表效果图 图5.3显示单词效果图此软件的核心就是查找英文单词的中文意思。在查找中文意思之前,首先需要使用openDatabase方法在Main类的onCreate方法中打开SQLite数据库,代码如下:database=openDatabase();其中database是在Main类中定义的SQLiteDatabase类型变量。然后在查找按钮的单击事件中添加如下的代码来查找英文单词,并显示中文意思。说到这里我们应该了解dictionary.db中的t_words表的结果,该表只有两个字段:english和chinese。分别表示单词的英文和中文描述。如果要获得单词的中文描述,只需要查找chinese字段即可。如onClick方法中的代码所示。查询单词的效果如图5.3所示。5.1.2在线查询查询模块的功能就是把查询到单词的中文解释在界面中显示出来。在屏幕中单击要查询的单词或输入要查询的单词,另一个界面中显示出单词和单词的中文解释。实现过程:每次输入框的改变都向服务器端发送一次请求来进行模拟查询,在listView中显示模拟查询出的单词,如图5.4所示:图5.4模糊查询图 图5.5显示单词含义图当在输入框输入字母时,会进行模糊查询,当点击查询按钮,也向服务器端发送一次请求来进行确认查询,将会显示该单词的信息,如图5.5所示。当单击listView中的单词时,会进入到另外一个界面,如下图5.6所示,下面对图5.5和5.6做一个简短的说明。在图5.5中,第一个为加入到单词本,当点击时该按钮时,选中的单词就会被添加到单词本,按钮图案上得“+”好就会变为“-”,表示添加成功;第二个按钮为发音,当点击该按钮时,就会读出选中单词的英文读音。在图5.6中,第一个为显示单词的按钮,当点击时,就会出现如图5.5所示的界面;第二个按钮为修改单词的中文释义,点击进入后就会出现如图5.10所示的界面;第三个按钮是删除按钮,当点击该按钮时,就会出现如图5.9所示的界面。 图5.6点击单词跳出的对话框5.2添加单词模块该模块就是将在控件中填写的单词和单词信息传到服务器端,由服务器端向数据库中添加单词信息,界面如图5.7所示:添加成功后会提示添加成功是否还要继续添加,其显示界面如图5.8所示。此模块只针对在线查询。下面对图5.7和图5.8做一个简短的说明。在图5.7中按照相应的提示输入英文单词和他的中文释义,第一个按钮为添加输入的相应单词和其中文释义,当点击此按钮时,会出现如图5.8所示的界面。第二个按钮表示的返回主界面。在图5.8中,当点击OK时继续添加单词,当点击NO时,表示不再添加单词返回主界面。注意:此处添加的单词在服务器端的oracle数据中,也就是说如果要是查询单词还是要从服务器端通过上面讲述的方法读取出来。所有使用的方法是insertWord(),此方法有一个参数,此参数是word,也就是说要加入的数据的库为单词。
图5.7添加单词界面 图5.8添加成功界面5.3删除单词模块 该模块是将某个单词传入到服务器端,由服务器端完成对单词的删除,它的界面就是弹出一个对话框。对话框中显示要删除的单词,对话框中两个按钮,一个确定删除,一个是不要删除。单击不同的按钮会有不同的效果。此模块只是针对在线查询。其界面如图5.9所示,此处主要用的是数据库操作的deleteNote()方法,它有一个参数为name,表示根据单词名字来删除单词,其中用到的sql语句是Stringsql=“deletefromwhereword=?”。
图5.9删除单词模块的界面5.4修改单词模块该模块完成单词信息的更新,不能修改单词,可以修改单词的含义,它的界面同添加单词的界面相同。此模块只针对在线词典。此处用到的方法主要是数据库的update()方法,此方法有三个参数。第一个参数是数据库的名字;第二个参数封装的是要改变的列的信息;第三个参数是where子句。例如:此处用到的是upd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 26年肺癌预防干预指引
- 道路设计答辩方案
- 数学教学活动课件设计指南
- 户外美术拓展课程设计与实践
- 广东省广州市黄埔区2023-2024学年八年级上学期期末地理试题(含答案)
- 企业用水安全教育
- 教育意义故事的核心价值与应用
- 2026一例亨廷顿舞蹈病患者护理查房解读
- 地铁施工盾构技术培训大纲
- 流水线生产设计
- 兽用麻醉管理办法
- 酮症酸中毒教学课件
- 酒店和足疗合作协议
- 企业所得税年度纳税申报表(A类2017年版2025年01月修订)-做账实操
- 2025急流救援技术培训规范
- 小区电动充电桩施工方案
- 2025年中国中医药出版社招聘笔试参考题库含答案解析
- 2025中级消防设施操作员作业考试题及答案(1000题)
- 申请建房报告范文
- 高速铁路供电安全检测监测系统(6C系统)总体技术规范
- L6562PFC设计参数自动计算电子表格表格
评论
0/150
提交评论