跨数据库支持多字段组合的自动编码方法和系统的制作方法

文档序号:6385747阅读:261来源:国知局

专利名称::跨数据库支持多字段组合的自动编码方法和系统的制作方法
技术领域
:本发明涉及一种数据库自动编码方法,特别是一种跨数据库支持多字段组合的自动编码方法。
背景技术
:目前常见的数据库有Oracle、MicrosoftSQLServer、MySql、DB2、Sybase和MicrosoftAccess,它们各自的自动编号实现方式有所不同。除了这些数据库自带的编码方法,为了满足一些特殊的编码需求,也有人在通过触发器、存储过程或程序代码来实现。1、有关现有技术a)OracleOracle不具有已定义好的自动编号列,需要手工创建。下面是创建Oracle自动编号列的一般方法I).为要添加Oracle自动编号列的表创建索引,被索引的列就是后面要实现的自动编号列,这样的列往往是名为“ID”的列。以方案LY中的表HARD为例,给其hard_id列创建索引的SQL语句为1.CREATEUNIQUEINDEXLY.HARDONLY.HARD(hard_id);2).创建一个最小值为1,最大值不限,递增值为I的序列。序列的创建同样可以通过OEM或直接输入SQL语句创建。创建序列的SQL语句为1.dropsequenceHARDSEQ;2.createsequenceHARD—SEQ3.minvalueI4.maxvalue9999999999999999999999999995.startwith216.1ncrementbyI7.cache208.order;3).最后为表LY.HARD创建触发器,以实现在每次插入行时,hard_id列自动递增编号。下面为创建触发器的SQL语句1.CREAT1:ORRbPLACliTRKKUiR"HARDjDjrMGGERwBEFORE2.JNSIKlON”LY,"IΙΛR1.),'FOREACHROW3.declare4.nextcheckupnonumber;5.begin6.selecthardseq.nextval7.1ntonextcheckupno8.fromdual;9.:NEW.hard_id:=nextcheckupno;1(1end;SQLServer米用标识增量的方式实现自动编码首先将列定义成整型int,然后在该属性字段的“列属性”里找到“标识”,将其中的是否选择标识置为“是”,最后再定义增量种子为I即可。也可以采用使用语法来创建自动编码列,语法如下1.CREATETABLE[表名字](2.[自增列名字][int]IDENTITY(I,I)NOTNULL,3.ooo其他列4.)c)MySqlMySql在建表时采用AUT0_INCREMENT属性来指定某列为自动编号,如1.CREATETABLE'mydatabase'.'mytable'(2.'ID'INTEGERUNSIGNEDNOTNULLAUT0_INCREMENT,3____4____5.PRIMARYKEY('id')6.)d)DB2标识列为DB2提供一种方法,可自动为添加至表的每一行生成唯一数值。要对新表定义标识列,在CREATETABLE语句中使用ASIDENTITY子句。当创建一个表时,如果需要将唯一标识添加至该表的每一行,那么可向该表添加一个标识列。要保证为添加至表的每一行提供唯一数字值,应在标识列定义唯一索引,或将其声明为主键。标识列的值可以“始终”或“在默认情况下”由DB2数据库管理器生成。将对定义为GENERATEDALWAYS(始终)的标识列给予始终由DB2数据库管理器生成的值,不允许应用程序提供显式的值。定义成GENERATEDBYDEFAULT(在默认情况下)的标识列使应用程序能够显式地为标识列提供值,如果应用程序不提供值,那么DB2将生成一个值;因为由应用程序控制该值,所以DB2不能保证该值的唯一性。下面是一个GENERATEDBYDEFAULT的示例1.createtablemydatabase.mytable(2.1Dintgeneratedbydefaultasidentity,3____4____5.)e)Sybase在Sybase中实现数据库自动编码的方法是采用Identity属性来标识列,identity跟Oracle中的sequence对象完成的功能类似,但是有一定的约束,每个table只能有一个identity的列,列的类型必须是numberic(η,O)。具体的创建语法如下1.createtabletable_name2.(column_namenumeric(precision,0)identity)f)MicrosoftAccess在表中定义字段时,可以使用数据属性来指定保存在表字段中数据的类型。其中有一个可选的类型是“自动编号”。应用该类型后,每当向表中添加一条新记录时,由MicrosoftAccess指定的一个唯一的顺序号(每次递增I)或随机数。自动编号字段,占4个字节(如果FieldSize属性设为ReplicationID则为16个字节),并且不能更新。可以使用NewValues属性来指定在将记录添加到表中时,“自动编号”字段的递增方式递增——(默认值)每新增一条记录,“自动编号”字段值增加I;随机——每新增一条记录,“自动编号”字段的值被指定为一个随机的LongInteger值(在同步复制数据库时,“自动编号”字段设置将设为“随机”,以确保输入到不同副本中的新记录具有唯一值)。具体的操作方法为在表“设计”视图中,单击“字段属性”窗格中的“常规”选项卡,在表的属性表中设置该属性。g)触发器下面的例子为在SQLServer数据库中应用触发器,实现对一表中的字符数据进行自动编码第一条数据编码为,FM00000/,第二条为'FM00001/,第三条为"FM00002',依此类推。1.CREATEtriggertest_triggerontest_table2.forinsert3.as4.declareinext_seqint5.selectinext_seq=(selectcast((selectsubstring(max(name),3,5)fromtest_table)asint)+1)6.updatetest_table7.setname='FM'+right{'00000'+cast(inext_seqasvarchar),5)8.frominsertediwhere1.1d=test_table.1d9.GOh)存储过程下面的例子为在SQLServer数据库中应用存储过程,实现按年度对进行项目编号进行自动编码1.createproceduresp—createjprojecteode(@Nochar(12)Output)2.As3.Declare@us_yearvarchar(4)4.Declare(c/usprojccleoclcciuii'i12)5.DccliiicprojccIcotieim6.Select@us_year=convert(char(4),datepart(year,getdate()))7.Select@us^projectcode=raax(projectcode)fromprojectwhereprojecrcodelike(S'iis_year+'%'8.1F((7usprojectcodeisnull9.set(iius.......projectcode...:OOOOOOOOtXMH110.Set(uu\projectcode=convert{int.substring!(■nsjprojectcode,5.8)I11.Set@No=@us_year+rep!icate(fs8-leii(coiivert(char(8),@uLprojectcode)))+coEYert(vareliar(8),@.uij)roJectcode)12.1f(@@error<>0)Iiset@No=nul1--衣示取值失败14.goi)程序代码下面的例子为在JAVA中实现以年度为区分自动产生班级编号1.Stringniati=myyear.format(now);2.try{'Class.ForName("siin.jclhc.odbc..1dfx'OiihcDriver");4.Stringuii2="jdbc:odbc:stu";5.Connectionconn2.......DriverManager.getConnection(ur12);6.Statementstat2=conn2.createStatement();7.Stringsq12="selectmax(banhao)fromclasswherebanhaolikeM!;Τ1.M·MiUlll!_55ResultSetrSet2=stat2.executeQueiy(sql2);8.1f(rSet2.next())|9.jislH1::::::rSet2.getlnt(I);10-}11.conn2.close();12.)■catchfjava.1ang.Exceptionexec){13.Jishu=O;14.}15.jishu++;2、现有技术缺陷从以上具有代表性的例子中可以看出,各种数据库之间不仅创建自动编码的语法各不相同,而且各自对自动编码列的要求也不尽相同。这种传统的数据库自动编码方式,依赖于具体的数据库,自动编码不能跨数据库平台,导致系统移植性差。另外,这种依赖于具体数据库的自动编码方法只支持对字段本身的顺序编码,如果该编码依赖于其它字段(例如银行每日的流水号依赖于日期,学生的班号依赖于具体的班级),则不能直接通过数据库自带的自动编码方法来实现,必须通过触发器、存储过程或程序代码等其他方式来实现。而在传统的做法中,每次获取自动编码必须查找当前数据库中的最大值,即调用MAX函数,该函数的执行时间长,如果在大并发量数据处理时采用该方法,容易造成瓶颈,降低系统的整体效率。
发明内容本发明目的在于提供一种跨数据库支持多字段组合的自动编码方法和系统,解决自动编码不能跨数据库平台、不支持多字段组合的问题。本发明的技术方案如下一种跨数据库支持多字段组合的自动编码方法,包括以下步骤参数配置步骤,输入自动编码的参数配置项,所述参数配置项包括数据库类型;服务启动步骤,加载所述参数配置项,根据所述数据库类型实例化数据库接口,创建初始存储空间;所述存储空间包括存储结构和数据内容,所述存储结构包括表名、自动编码字段名、关联字段名、自动编码字段当前最大值和关联字段和更新时间,所述数据内容包括零到多条符合该存储结构的数据项,所述初始存储空间包括所述存储结构和零条数据项;编码获取步骤,向用户提供所需编码的最大编码,包括判断子步骤、输出子步骤和编码注册子步骤;所述判断子步骤,根据查找条件在所述存储空间内获取最大值,如果获取成功则进入输出子步骤,如果获取失败则进入编码注册子步骤;所述输出子步骤,按照编码输出规则输出下一编码,并将所述更新时间更新为当前时间;所述编码注册子步骤,包括查找所述最大值;向所述存储空间注册新的数据项;返回所述最大值;进入输出子步骤。本发明的方法可以一次检索多次使用、提高内存操作速度。进一步地,所述数据库接口包括最大值查找接口函数。所述编码注册子步骤进一步包括通过所述最大值查找接口函数查找所述最大值,如果没找到,则将默认值作为所述最大值。进一步地,所述存储结构进一步包括所述编码增量和编码格式;该方法进一步包括以下步骤定制编码输出规则步骤,所述编码输出规则包括编码递增规则和编码输出格式,所述编码递增规则用于规定编码增量,所述编码增量默认为1,所述编码输出格式用于规定所述编码格式,所述编码格式默认为整数。进一步地,所述编码注册子步骤进一步包括锁定步骤和解锁步骤;锁定步骤,在所述查找所述最大值之前锁定注册查找代码块;解锁步骤,在向所述存储空间注册新的数据项之后,在所述返回所述最大值之前解锁该注册查找代码块。本发明通过最小锁定防止数据读写冲突。进一步地,所述参数配置项还包括自动清理周期和数据超时时间;该方法进一步包括以下步骤在所述自动清理周期清除超过所述数据超时时间的信息条目。本发明通过自动清理不常用的信息条目,防止长时间运行导致内存溢出,提高查找效率。相应地,本发明还提供一种跨数据库支持多字段组合的自动编码系统,包括参数配置模块,用于输入自动编码的参数配置项,所述参数配置项包括数据库类型;服务启动模块,用于启动所述参数配置模块,加载所述参数配置项;以及,用于根据所述数据库类型实例化数据库接口;以及,启动存储管理模块,创建初始存储空间;存储管理模块,用于管理存储空间,所述存储空间包括存储结构和数据内容,所述存储结构包括表名、自动编码字段名、关联字段名、自动编码字段当前最大值和关联字段和更新时间,所述数据内容包括零到多条符合该存储结构的数据项,所述初始存储空间包括所述存储结构和零条数据项;编码获取模块,用于向用户提供所需的编码的最大编码,包括判断子模块,输出子模块和编码注册子模块;判断子模块,用于根据查找条件在所述存储空间内获取最大值,如果获取成功则调用输出子模块,如果获取失败则调用编码注册子模块;输出子模块,用于按照编码输出规则输出下一编码,并将所述更新时间更新为当前时间;编码注册子模块,用于调用所述数据库接口模块的最大值查找接口函数查找最大值以及用于向所述存储管理模块的存储空间注册新的数据项;以及用于返回所述最大值;以及用于调用输出子模块;进一步地,该系统还包括数据库接口模块,用于定义多种数据库类型的数据库接口,所述数据库接口包括最大值查找接口函数;所述编码注册子模块进一步用于调用所述数据库接口模块,查找所述最大值,如果没找到,则将默认值作为所述最大值。进一步地,所述存储管理模块的所述存储结构进一步包括所述编码增量和编码格式;该系统进一步包括编码输出规则模块,用于定制编码输出规则,所述编码输出规则包括编码递增规则和编码输出格式,所述编码递增规则用于规定编码增量,所述编码增量默认为1,所述编码输出格式用于规定所述编码格式,所述编码格式默认为整数。进一步地,所述编码注册子模块进一步用于在所述查找所述最大值之前锁定注册查找代码块以及在向所述存储空间注册新的数据项之后,在返回所述最大值之前解锁注册查找代码块。进一步地,所述参数配置模块的所述参数配置项还包括自动清理周期和数据超时时间;该系统进一步包括自动清理模块,用于在自动清理周期清除超过所述数据超时时间的信息条目。本发明可以有效地提高了自动编码的并发度,使软件开发架构的可移植性得以显著改进。特别是在一个项目中需要多处使用自动编码的情况下,采用该方法能够有效减少代码量、提高开发速度和编码质量。下面将参照附图并结合实施例对本发明进行具体说明。图1为本发明方法的流程图。具体实施例方式下面参照附图并借助本发明的实施例,对本发明的技术方案做详细描述。本发明的一种跨数据库支持多字段组合的自动编码系统包括参数配置模块、服务启动模块、数据库接口模块、存储管理模块、编码规则模块、编码获取模块、自动清理模块。其中,服务启动模块直接与参数配置模块、数据库接口模块和存储管理模块进行通讯;编码获取模块包含编码注册子模块,并有条件调用编码注册子模块;存储管理模块、编码注册模块、编码获取模块、自动清理模块通过共享数据区进行通讯。编码获取模块有条件调用编码注册子模块是指在本发明的系统使用过程中,用户只调用编码获取模块,编码注册子模块由编码获取模块调用,调用的规则是每遇到一个未注册的编码就注册一个。具体见下面六、编码获取模块和七、编码注册子模块的描述。下面分别对各个模块以及各自所执行的步骤进行说明一、参数配置模块参数配置模块用于输入自动编码的参数配置项,实现用户对各种可控参数的配置,参数配置项包括数据库类型、自动清理周期、数据超时时间,参数配置模块可以实现用户对自动编码的控制。参数配置模块的具体实现可以通过文本文件、XML文件或其它可持久化文件来保存参数。参数配置模块可以提供参数管理界面。如果提供了参数管理界面,完成参数配置后可以使参数直接生效,也可以通过重新启动服务来生效。例以下是一个基于JAVA的一种实现方式举例1、参数配置文件为config.xml文件<xmlversion="1.0”encoding="UTF-8"><config><数据库类型>orade</数据库类型><Cl动淸通周期>7</CJ动淸理周期><数据超时时间></数据超时吋_></config>注自动清理周期和数据超时时间的单位为天。2、读写参数配置文件config.xml文件的JAVA代码/7头文件importjava.1o.FiIeOutputStreain;importJava,io.lOExceplion;importjava.util.1terator;importjitva.nil1.11st:1mportorg.jdom.Document;importorgjdom.Element;importorgjdom.lDOMException;importorg.jdom.Namespace;importorg.jdom.1nput.SAXBuiider;importorg.xml.sax.1npntSource;importo^.jdom.output.XMLOutputter;/modelpublicclassConfigXmlextendsBaseObjectimplementsSerializable{privatestaticfinallongscrialVcrsionlilD=IL;."FieldsprivateStringdatabaseType;privateIntegercleanPeriod;privateIntegerexpireTime;".Constructors/**defaultconstructor*/publicConfigXml(){}/**minimalconstructor*/publicConfigXmI(StringdatabaseType,IntegercleanPeriodIntegerexpireTime)|this.databaseType=databaseType;this.cleanPeriod=cleanPeriod;this.expireTime=expireTime;}publicStringgetDatabaseType(){returnthis.databaseType;}publicvoidselDalabaseType(SiringdatabaseType){this.databaseType=databaseType;}publicIntegergelCIeaiiPeriod(){returnthis.cleanPeriod;}publicvoidsetCleanPeriod(IntegercleanPeriod){this.cleanPeriod=cleanPeriod;}publicIntegergetExpirel'ime(){returnthis.expireTime;}publicvoidsetExpireTime(IntegerexpireTime){this.expireTime=expireTime;}}//4:W变WConfigXmIex;//config.xml.A件privateConfigXmIReadConflg()throwsJDOMException,IOException|cx=newConfigXmIO;//^I,■)变:!iISAXBuilderbuilder=newSAXBuiIder(false);//使jjijdom解析XML义*件Documentdoc=buMer.build("con%xmr);//f.J到耍解析的文HElementroot=doc.getRootElemenl();//得到根.W点Namespacens=root,getNamespaceO;//获得XML屮ff'J命名1今:fuj(XML'I'未记义《U'不Μ)ex.setDatabaseType(root.getChildr数据)率^^'!",nsJ.getTextO);ex.setCIeanPeiiod(Integer.parselntCiOot.getChildCf!动ii'fM周期'ns).getText()));ex.setExpireTime(Integer.parselnt(root.getChild("数据超时时_*,,ns).getText())};Returncx;\I//写入config.xml.文f|:privatevoidwriteConfig()throwsIOException3IOException{Elementroot=newElement(Mconfig");//创建根节点Documentdoc=newDocument(rool);//将根节点添加到文档中root.addElement(”数据库.类!S,1).addText(cx.getDatabaseType());root.addElement("自动淸理周期M).addText(cx.getCkanPeriod()+””);root.addElement(”数据超时时间”).addText(cx.getExpireTime()+””);XMLOutputterout=newXMLOutputter();out.output(doc,newFileOutputStream("config.xml"));}二、服务启动模块服务启动模块用于实现自动编码服务的启动,包括用于加载参数配置项,实例化数据库接口模块,调用存储管理模块创建初始存储空间,实现提供自动编码服务的必要条件。服务启动模块中实例化数据库接口模块和调用存储管理模块创建初始存储空间的步骤可以互换。例以下是一个基于JAVA的一种实现方式举例//实例化数据库接口//在SSH架构中构造一个实现数据库接口的DAO实现类,通过spring的自动注入来实现ORepository("dataBaseDao")publicclassDataBaseDaoHibernateextendsGenericDaoHibernate〈DM,String>implementsIDataBase{...(详细内容见下述“数据库接口模块”中的“一种基于Oracle的数据库接口实现”)}//创建初始存储空间HashMap<String,TableSid>SidMap=newHashMap<String,TableSid>();//TableSid的定义见下述“存储管理模块”中的例子三、数据库接口模块数据库接口模块用于定义多种数据库类型的数据库接口,所述数据库接口包括最大值查找接口函数。该模块实现多种类型的数据库查找最大值接口,将所述数据库接口实例化后为实际使用提供服务。在一个自动编码服务中,允许实现一到多种数据库的接口,但必须保证参数配置中出现的所有数据库类型被实现。例以下是一个基于JAVA的一种实现方式举例//数据库接口定义publicinterfaceIDataBase{//查找最大值接口函数intGetDBMaxSeed(StringtableColumn,Stringf]keys);}il·I^SfOracle的数据库接U实现importja\a.util.List;importorg.apache.commons.logging.Log;ivnportort1.apache.commons.1ogging.LogFactory;iη·portorg.hibernate.Query;importorg.springfraniework.stereotype.Repositoiy;importcoin.1i(:203.SidService.!DataBase;importcom.opensource.mode1.AppIicability;iinportcoin.opensource.mode1.DM;publicclassDataBaseDaoHibeinateextendsGenericDaoIiibernate<[)M,String〉implements!DataBase{//实现接U!DataBase//propertyconstantspublicDataBaseDaoHibernate();}找最人值接IIPfr数的实现publicintC}etDBMaxSeed(StringtaMeCoiumn,StrkgOkeys){tryIif(tabieCoiunm:==null)|return-1:}//规记以#作为分W符String[]names-tableColumn.spHt("#");//ii;.>S1丨·:则衣达式//数纽屮第-个Y符屮为衣名,Mfi'个为编《7·段名,中_为关联宁段名if(names.1ength<2){Fotunm-*2"}StringqueiyString="selectmaxC'+namesfnamesiength-1]+")from"+namesfO]+"whereI=P;if(keys!=null){for(inti=0;i<keys.length;i++){queryString+="and"+namesp+I]+"=,".keys[i]+,"w;}QueryqueryObject=getMibernateTempiatei).getSessionFactory().getCuiTentSession().crealeQuei'y{querySiring);ListtempList=queryObject.1ist();ilttempLisr==null){return0;jelse{Objecttemp=tenipList.1terator().next();il'(tenip==null)temp='V;returnInteger.興seInt(t€mp,toStting());/纖考读取操作}}catch(RuntimeExceptionre){log,enOr("getmaxfailed're);throwre;I}I四、存储管理模块存储管理模块用于管理存储空间,存储管理模块在服务启动模块启动的时候,在内存中创建存储空间。所述存储空间包括存储结构和数据内容,存储结构用于存储不定长条目的信息,能够支持快速查找。存储结构至少包括表名、自动编码字段名、自动编码字段的当前最大值、关联字段名、关联字段值、更新时间。其中,关联字段名和关联字段值可以有多个,但应当保持一一对应关系。所述数据内容包括零到多条符合该存储结构的数据项,每一条所述数据项构成一个信息条目。在创建初始存储空间的时候,只有存储结构,没有数据内容。也就是,所述初始存储空间包括所述存储结构和零条数据项。存储结构可以采用哈希表、链表、队列、数组、向量、堆等方式实现,优选哈希表。存储结构的内容还包括编码增量和编码格式。关联字段名可以有零到多个。表名、关联字段名和自动编码字段名可以分别存储,也可以存储在一个变量中,比如字符串变量,中间用分隔符,如逗号、分号、空格等在表名和字段名中不会用到的特殊符号隔开。本实施例中使用#分隔符。例以下是一个基于JAVA的一种实现方式举例。在本例中,表名、关联字段名和自动编码字段名按顺序存放在tableColumn字符串中,以#作为分隔符。并且,将具体的值存放在二级子表中,包括自动编码字段的当前最大值和关联字段值,二级子表用ConcurrentHashMap实现。publicclasslabIcSidJStringtableColumn;//农名、关联字段名和0动编码字段名intSoetIMiix(.)999;iti!ScetlMin1:1SidKeyStrategyks;//编码增量ISidValueStrategyvs;//编码格式DateupdateTime;//史新时闻,以天为華·位C()ncuircrilliiis!iMap<Siring.()l)ject>SecdMap=newConcurrentHashMap<String,Object>();//自动编码ψ段的当前M大值和关联宁-段值privateIDataBasedataBaseDao;//数扼库接口//构造函数publicTabieSid(IDataBasedataBaseDao,StringtableColumn){this.dataBaseDao=dataBaseDao;this.tableColumn=tableColumn;ks=newDefaultSidKeyStrategy();vs=newSidValueStrategyO;updateTime=newDateQ;}//向级表屮注册二级子表,_丨4动编码字段的3前最大值和关联字段值publicintGetIntSid(String[]keys)throwsException{Stringkey=ks.CreateGabteColumiiJceys+hZ/ftl造—级/·衣关键字synchronized(this)|//K、/:用synchronizedM步注册杏找代妈块,起到锁定作用if(SeedMap.get(key)=null)fintmax=dataBaseDao.GetDBMaxSeed(tableColumn,keys);//輝IIJ数据作接II实现if(max=......O)\max^this.SeedMin;}this.SetSeed(keys,max);I}intincSeedvs.Create(((I[iteger)SeedMap.get(key)).1nlValue(),this.SeedMin,tliis.SeedMax);//V1:见1、'述“编W规则投块”例中的“编W递增’的接II实现”SeedMap.put(key,incSeed);returnincSeed;}}//构造+:级/·表关键?’·的接I丨定义publicinterfaceISidKeyStrategyextendsSerializaMefStringCreate(Stringhead,Stringf]segs);I权利要求1.一种跨数据库支持多字段组合的自动编码方法,其特征在于,包括以下步骤参数配置步骤,输入自动编码的参数配置项,所述参数配置项包括数据库类型;服务启动步骤,加载所述参数配置项,根据所述数据库类型实例化数据库接口,创建初始存储空间;所述存储空间包括存储结构和数据内容,所述存储结构包括表名、自动编码字段名、关联字段名、自动编码字段当前最大值和关联字段和更新时间,所述数据内容包括零到多条符合该存储结构的数据项,所述初始存储空间包括所述存储结构和零条数据项;编码获取步骤,向用户提供所需编码的最大编码,包括判断子步骤、输出子步骤和编码注册子步骤;所述判断子步骤,根据查找条件在所述存储空间内获取最大值,如果获取成功则进入输出子步骤,如果获取失败则进入编码注册子步骤;所述输出子步骤,按照编码输出规则输出下一编码,并将所述更新时间更新为当前时间;所述编码注册子步骤,包括查找所述最大值;向所述存储空间注册新的数据项;返回所述最大值;进入输出子步骤。2.根据权利要求1所述的跨数据库支持多字段组合的自动编码方法,其特征在于,所述数据库接口包括最大值查找接口函数;所述编码注册子步骤进一步包括通过所述最大值查找接口函数查找所述最大值,如果没找到,则将默认值作为所述最大值。3.根据权利要求1所述的跨数据库支持多字段组合的自动编码方法,其特征在于,所述存储结构进一步包括所述编码增量和编码格式;该方法进一步包括以下步骤定制编码输出规则步骤,所述编码输出规则包括编码递增规则和编码输出格式,所述编码递增规则用于规定编码增量,所述编码增量默认为1,所述编码输出格式用于规定所述编码格式,所述编码格式默认为整数。4.根据权利要求1所述的跨数据库支持多字段组合的自动编码方法,其特征在于,所述编码注册子步骤进一步包括锁定步骤和解锁步骤;锁定步骤,在所述查找所述最大值之前锁定注册查找代码块;解锁步骤,在向所述存储空间注册新的数据项之后,在所述返回所述最大值之前解锁该注册查找代码块。5.根据权利要求1所述的跨数据库支持多字段组合的自动编码方法,其特征在于,所述参数配置项还包括自动清理周期和数据超时时间;该方法进一步包括以下步骤在所述自动清理周期清除超过所述数据超时时间的信息条目。6.一种跨数据库支持多字段组合的自动编码系统,其特征在于,包括参数配置模块,用于输入自动编码的参数配置项,所述参数配置项包括数据库类型;服务启动模块,用于启动所述参数配置模块,加载所述参数配置项;以及,用于根据所述数据库类型实例化数据库接口;以及,启动存储管理模块,创建初始存储空间;存储管理模块,用于管理存储空间,所述存储空间包括存储结构和数据内容,所述存储结构包括表名、自动编码字段名、关联字段名、自动编码字段当前最大值和关联字段和更新时间,所述数据内容包括零到多条符合该存储结构的数据项,所述初始存储空间包括所述存储结构和零条数据项;编码获取模块,用于向用户提供所需的编码的最大编码,包括判断子模块,输出子模块和编码注册子模块;判断子模块,用于根据查找条件在所述存储空间内获取最大值,如果获取成功则调用输出子模块,如果获取失败则调用编码注册子模块;输出子模块,用于按照编码输出规则输出下一编码,并将所述更新时间更新为当前时间;编码注册子模块,用于调用所述数据库接口模块的最大值查找接口函数查找最大值以及用于向所述存储管理模块的存储空间注册新的数据项;以及用于返回所述最大值;以及用于调用输出子模块。7.根据权利要求6所述的跨数据库支持多字段组合的自动编码系统,其特征在于,该系统还包括数据库接口模块,用于定义多种数据库类型的数据库接口,所述数据库接口包括最大值查找接口函数;所述编码注册子模块进一步用于调用所述数据库接口模块,查找所述最大值,如果没找到,则将默认值作为所述最大值。8.根据权利要求6所述的跨数据库支持多字段组合的自动编码系统,其特征在于,所述存储管理模块的所述存储结构进一步包括所述编码增量和编码格式;该系统进一步包括编码输出规则模块,用于定制编码输出规则,所述编码输出规则包括编码递增规则和编码输出格式,所述编码递增规则用于规定编码增量,所述编码增量默认为1,所述编码输出格式用于规定所述编码格式,所述编码格式默认为整数。9.根据权利要求6所述的跨数据库支持多字段组合的自动编码系统,其特征在于,所述编码注册子模块进一步用于在所述查找所述最大值之前锁定注册查找代码块以及在向所述存储空间注册新的数据项之后,在返回所述最大值之前解锁注册查找代码块。10.根据权利要求6所述的跨数据库支持多字段组合的自动编码系统,其特征在于,所述参数配置模块的所述参数配置项还包括自动清理周期和数据超时时间;该系统进一步包括自动清理模块,用于在自动清理周期清除超过所述数据超时时间的信息条目。全文摘要本发明公开了一种跨数据库支持多字段组合的自动编码方法和系统,方法包括参数配置步骤、服务启动步骤和编码获取步骤,编码获取步骤包括判断子步骤、输出子步骤和编码注册子步骤。相应地,系统包括参数配置模块、服务启动模块和编码获取模块,编码获取模块包括判断子模块、输出子模块和编码注册子模块。本发明可以有效地提高了自动编码的并发度,使软件开发架构的可移植性得以显著改进,在多处使用自动编码的情况下,采用本发明能够有效减少代码量、提高开发速度和编码质量。文档编号G06F17/30GK103020285SQ20121058090公开日2013年4月3日申请日期2012年12月27日优先权日2012年12月27日发明者廖中华申请人:北京仿真中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1