一种SQL语句的快速生成方法与流程

文档序号:13422131阅读:2179来源:国知局
本发明涉及数据库
技术领域
:,具体说是一种sql语句的快速生成方法。
背景技术
::随着数据库技术的发展,各种需求不断出现,不断督促着进一步的技术革新、升级。在程序开发中,程序员有时会遇到如下情况:在公司上班时,有时候白天的活没干完,程序员就会把工作带回家晚上加班继续做。但是,公司为程序开发配套的开发用数据库通常是实体数据库,是部署在开发支持服务器上的,所述开发支持服务器是公司局域网内部的一台服务器,服务端正常运行依赖于开发支持服务器上的开发用数据库。由于在家加班是无法接入公司局域网内部的,因此就不能连上开发支持服务器上的开发用数据库,这就导致服务端不能正常工作,程序开发时功能也就没办法调试。现有技术中,一种解决方法就是使用虚拟数据库。在公司上班时,就使用公司为程序开发配套的开发用数据库;回到家,就使用内存中的虚拟数据库模拟开发用数据库,做一些基本的功能调试,一般情况下绝对是足够了。当前app中需要大量的本地化存储服务。为了满足当前业务需求,我们在app中需要大量使用数据库工具,本发明旨在让程序员便捷开发。实体数据库读取数据需要以下步骤:1、跟数据库建立连接,2、编写sql查询语句,3、执行查询语句,4、得到查询结果,5、关闭数据库。显然,在需要频繁跟数据库进行交互、需要频繁读取/存储数据的今天,访问数据库的工作量非常大,程序员繁琐的编写sql语句,不但工作量大,而且容易导致出错,有必要对此进一步进行合理的优化。技术实现要素:针对现有技术中存在的缺陷,本发明的目的在于提供一种sql语句的快速生成方法,能够将输入的信息根据指令自动生成对应的sql语句,提高代码编写速度和效率,避免重复劳动累积产生的错误,生成的sql语句格式统一、标准,易于后续步骤中使用。为达到以上目的,本发明采取的技术方案是:一种sql语句的快速生成方法,其特征在于,包括如下步骤:读取用户输入的对象布局模型,读取用户输入的指令,从对象布局模型中依次解析出以下信息:表名称tablenamedstr,基础类型结构表,包括:表数据段名称,表数据段类型,表数据值大小,特殊sql字段处理标志位,包括:主健,自增,是否唯一,是否允许为空,数据库升级处理标志位。在上述技术方案的基础上,根据表名称tablenamedstr和基础类型结构表,进一步形成基础表结构。在上述技术方案的基础上,根据基础表结构、特殊sql字段处理标志位和数据库升级处理标志位,进一步形成标准sql语句。本发明所述的sql语句的快速生成方法,能够将输入的信息根据指令自动生成对应的sql语句,提高代码编写速度和效率,避免重复劳动累积产生的错误,生成的sql语句格式统一、标准,易于后续步骤中使用。附图说明本发明有如下附图:图1本发明的流程框图。具体实施方式以下结合附图对本发明作进一步详细说明。如图1所示,本发明所述的sql语句的快速生成方法,包括如下步骤:读取用户输入的对象布局模型,读取用户输入的指令,从对象布局模型中依次解析出以下信息:表名称tablenamedstr,基础类型结构表,包括:表数据段名称,表数据段类型,表数据值大小,特殊sql字段处理标志位,包括:主健,自增,是否唯一,是否允许为空,数据库升级处理标志位。在此给出创建数据库时,产生sql语句的具体实施案例:获取对象布局模型,表名称后,会根据基本信息产生基础sql语句:表名称函数:-(nsstring*)tablenamedstr{nsstring*tablenamestr=_datamodelmapping.tablenamestr;returntablenamestr;}创建数据库表sql语句基本信息:nsmutablestring*createsqlstr=[nsmutablestringstring];[createsqlstrappendformat:@"createtableifnotexists%@(",[selftablenamedstr]);而后根据具体信息产生主键等信息:if(self.datamodelmapping.primarykey!=nil&&self.datamodelmapping.primarykey.length>0){[createsqlstrappendformat:@"'%@'integerprimarykeyautoincrementnotnull,",self.datamodelmapping.primarykey];}else{[createsqlstrappendformat:@"'id'integerprimarykeyautoincrementnotnull,"];}进行最后一步,逐步解析对象布局模型解析部分:nsmutablearray*fieldarray=_datamodelmapping.mappedarray;for(nsintegeri=0;i<fieldarray.count;++i){if(0!=i){[createsqlstrappendstring:@","];}[createsqlstrappendstring:@"\n"];nsdictionary*dict=[fieldarrayobjectatindex:i];//表数据段名称nsstring*sname=(nsstring*)[dictobjectforkey:ksqlstorenamed];//表数据段类型nsstring*stype=(nsstring*)[dictobjectforkey:ksqlstoretype];//表数据值大小nsnumber*nsize=(nsnumber*)[dictobjectforkey:ksqlstoresize];//主健nsnumber*nprimarykey=(nsnumber*)[dictobjectforkey:ksqlstoreprimarykey];//自增nsnumber*nautoincrement=(nsnumber*)[dictobjectforkey:ksqlstoreautoincrement];//是否唯一nsnumber*nunique=(nsnumber*)[dictobjectforkey:ksqlstoreunique];//是否允许为空nsnumber*nnotnull=(nsnumber*)[dictobjectforkey:ksqlstorenotnull];nsobject*defaultvalue=[dictobjectforkey:ksqlstoredefaultvalue];[createsqlstrappendformat:@"%@",sname];if(stype){[createsqlstrappendformat:@"%@",stype];}if([snameisequaltostring:self.datamodelmapping.primarykey]){[createsqlstrappendformat:@"primarykeynotnull"];}if(nsize&&nsize.intvalue){[createsqlstrappendformat:@"(%@)",nsize];}if(nprimarykey&&nprimarykey.intvalue){[createsqlstrappendstring:@"primarykey"];}if(nautoincrement&&nautoincrement.intvalue){[createsqlstrappendstring:@"autoincrement"];}if(nunique&&nunique.intvalue){[createsqlstrappendstring:@"unique"];}if(nnotnull&&nnotnull.intvalue){[createsqlstrappendstring:@"notnull"];}if(defaultvalue){if([defaultvalueiskindofclass:[nsnullclass]]){[createsqlstrappendstring:@"defaultnull"];}elseif([defaultvalueiskindofclass:[nsnumberclass]]){[createsqlstrappendformat:@"default%@",defaultvalue];}elseif([defaultvalueiskindofclass:[nsstringclass]]){[createsqlstrappendformat:@"default'%@'",defaultvalue];}else{[createsqlstrappendformat:@"default'%@'",defaultvalue];}}}[createsqlstrappendstring:@"]\n"];最终,createsqlstr就是我们要的数据库创建表sql语句。在上述技术方案的基础上,根据表名称tablenamedstr和基础类型结构表,进一步形成基础表结构。在上述技术方案的基础上,根据基础表结构、特殊sql字段处理标志位和数据库升级处理标志位,进一步形成标准sql语句。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1