发明内容
本发明提供了一种智能卡中数据库的查询方法及装置,利用本发明所述的方法及装置,能够提高查询速度。
本发明一种智能卡中数据库的查询方法采用以下技术方案:
一种智能卡中数据库的查询方法,包括如下步骤:
对查询条件进行分类;
将分类结果进行排序,得到查询条件序列;
根据所述查询条件序列,生成操作数;
按照所述操作数确定的运算规则,对所述查询条件序列进行运算,得到查询结果。
其中,所述对查询条件进行分类的步骤具体为:
按照“可能包含的查询条件”、“必须包含的查询条件”、“不能包含的查询条件”将所述查询条件进行分类。
其中,所述对分类结果进行排序,得到查询条件序列的步骤具体为:
定义“不能包含的查询条件”分类中,各查询条件所对应的逻辑位操作类型为“非”操作;
定义“可能包含的查询条件”分类中,各查询条件之间的逻辑位操作类型为“或”操作;
定义“必须包含的查询条件”以及“不能包含的查询条件”分类中,各查询条件之间的逻辑位操作类型为“与”操作;
定义“可能包含的查询条件”、“必须包含的查询条件”以及“不能包含的查询条件”三个分类之间的逻辑位操作类型为“与”操作;
排列与所述三种逻辑位操作类型相对应的三类查询条件,得到查询条件序列。
其中,所述排列与所述三种逻辑位操作类型相对应的三类查询条件的步骤具体为:
按照进行“或”、“与”、“非”逻辑位操作的顺序,排列分别与所述三种逻辑位操作类型相对应的分类,得到查询条件序列:
(“可能包含的查询条件”、“必须包含的查询条件”、“不能包含的查询条件”)。
其中,根据所述查询条件序列,生成操作数的步骤具体为:
在所述查询条件序列中,根据是否为定义的“不能包含的查询条件”分类中各查询条件所对应的逻辑位操作类型,生成第一操作数;
在所述查询条件序列中,根据每两个查询条件之间的逻辑位运算关系,生成第二操作数。
其中,所述第一操作数和第二操作数的位数,与智能卡操作***中CPU的位数相同;若所述第一操作数或第二操作数小于所述智能卡操作***中CPU的位数,不足的位用0补足。
其中,所述生成第一操作数的步骤为:
在所述查询条件序列中,用1表示进行“非”逻辑位运算的查询条件;用0表示进行其他类型逻辑位运算的查询条件;
所述生成第二操作数的步骤为:
在所述查询条件序列中,用“1”表示每两个查询条件之间进行的“或”运算,用“0”表示每两个查询条件之间进行的“与”运算。
其中,所述按照所述操作数确定的运算规则,对所述查询条件序列进行运算的步骤具体为:
按照第一操作数确定的运算规则,对“不能包含的查询条件”分类的各查询条件进行“非”运算,得到“不能包含的查询条件”分类中各查询条件的运算结果;
按照第二操作数确定的运算规则,对“可能包含的查询条件”分类的各查询条件进行“或”运算,得到“可能包含的查询条件”分类的运算结果;并与“必须包含的查询条件”分类的各查询条件,以及按照第一操作数运算获得的“不能包含的查询条件”分类中各查询条件的运算结果进行“与”运算。
本发明所述的智能卡中数据库的查询方法,首先对用户输入的查询条件进行分类,得到查询条件序列,并根据在查询条件序列中各查询条件或各查询条件之间的逻辑位操作类型,得到第一操作数和第二操作数。通过得到的第一操作数和第二操作数所定义的运算规则,对查询条件序列进行计算,最终得到查询结果。这样,就避免了现有技术数据库查询技术中需要利用正则表达式进行的复杂运算。因此,本发明的方法大大提高了CPU的处理速度,加快了查询的速度。
本发明智能卡数据库的查询装置采用以下技术方案:
一种智能卡数据库的查询装置,包括:
分类单元,用于对查询条件进行分类;
序列生成单元,用于对分类结果进行排序,得到查询条件序列;
操作数生成单元,用于根据所述查询条件序列,生成操作数;
运算单元,用于按照所述操作数确定的运算规则,对所述查询条件序列进行运算,得到查询结果。
其中,所述序列生成单元包括:
第一操作类型定义模块,用于定义“不能包含的查询条件”分类中,各查询条件所对应的逻辑位操作类型为“非”操作;
第二操作类型定义模块,用于定义“可能包含的查询条件”分类中,各查询条件之间的逻辑位操作类型为“或”操作;
第三操作类型定义模块,用于定义“必须包含的查询条件”以及“不能包含的查询条件”分类中,各查询条件之间的逻辑位操作类型为“与”操作;
第四操作类型定义模块,用于定义“可能包含的查询条件”、“必须包含的查询条件”以及“不能包含的查询条件”三个分类之间的逻辑位操作类型为“与”操作;
排序单元,用于排列与所述三种逻辑位操作类型相对应的三类查询条件,得到查询条件序列,并将所述查询条件序列送入运算单元。
其中,所述操作数生成单元包括:
第一操作数生成单元,用于在查询条件序列中,根据是否为定义的“不能包含的查询条件”分类中各查询条件所对应的逻辑位操作类型,生成第一操作数;
第二操作数生成单元,用于在查询条件序列中,根据定义的每两个查询条件之间的逻辑位运算关系,生成第二操作数。
其中,所述第一操作数和第二操作数的位数,与智能卡操作***中CPU的位数相同;若所述第一操作数或第二操作数小于所述智能卡操作***中CPU的位数,不足的位用0补足。
其中,运算单元按照第一操作数确定的运算规则,对“不能包含的查询条件”分类的各查询条件进行“非”运算,得到“不能包含的查询条件”分类中各查询条件的运算结果;
按照第二操作数确定的运算规则,对“可能包含的查询条件”分类的各查询条件进行“或”运算,得到“可能包含的查询条件”分类的运算结果;并与“必须包含的查询条件”分类的各查询条件,以及按照第一操作数运算获得的“不能包含的查询条件”分类中各查询条件的运算结果进行“与”运算。
本发明所述的智能卡中数据库的查询装置,首先由分类单元对用户输入的查询条件进行分类,并由排序单元对所述查询条件进行排序,得到查询条件序列;并根据在查询条件序列中各查询条件或各查询条件之间的逻辑位操作类型,由操作数生成单元分别得到第一操作数和第二操作数。通过得到的第一操作数和第二操作数所定义的运算规则,对查询条件进行计算,最终由运算单元得到查询结果。这样,就避免了现有技术数据库查询技术中需要利用正则表达式进行的复杂运算。因此,本发明的方法大大提高了CPU的处理速度,加快了查询的速度。
具体实施方式
为使本发明技术方案的优点更加清楚,下面结合附图对本发明做进一步的详细说明。
为了解决现有技术数据库查询技术中,需要利用正则表达式进行的复杂运算,而导致查询速度降低的问题,本发明提供了一种在智能卡中数据库的查询方法。如图1所示,所述方法包括:
S1:对查询条件进行分类;
S2:将分类结果进行排序,得到查询条件序列;
S3:根据所述查询条件序列,生成操作数;
S4:按照所述操作数确定的运算规则,对所述查询条件序列进行运算,得到查询结果。
本发明所述的智能卡中数据库的查询方法,首先对用户输入的查询条件进行分类,得到查询条件序列,并根据在查询条件序列中各查询条件或各查询条件之间的逻辑位操作类型,得到第一操作数和第二操作数。通过得到的第一操作数和第二操作数所定义的运算规则,对查询条件序列进行计算,最终得到查询结果。这样,就避免了现有技术数据库查询技术中,需要利用正则表达式进行的复杂运算。因此,本发明的方法大大提高了CPU的处理速度,加快了查询的速度。
此外,利用本发明所述的方法,对查询条件进行分类,并利用生成的操作数进行操作,得到最终的运算结果,占用内存资源少,进一步的提高了查询的速度。
下面以查询条件为BMI为例,详细说明本发明所述方法的实现过程。
在本发明中,设定智能卡芯片的CPU位数为W,用户输入的查询条件BMI个数为N。鉴于智能卡应用的特殊性,设定N≤W。
T1:分析输入的查询条件BMI,将输入的查询条件BMI按照“可能包含的BMI”、“必须包含的BMI”、“不能包含的BMI”将查询条件BMI进行分类。
在此,“可能包含的BMI”是指当用户同时输入多个的查询条件BMI,可能包含的某几个查询条件;“必须包含的BMI”是指,查询条件BMI中全部都包含的查询条件;“不能包含的BMI”,则是指在输入的查询条件BMI中不能包含的查询条件。
经分析得出,在查询条件中,“可能包含的BMI”为n1个,“必须包含的BMI”为n2个,“不能包含的BMI”为n3个,其中,N=n1+n2+n3。
在此,用如下的方式表示对BMI的分类结果:
n1:BMIi1,BMIi2,……BMIin1;
n2:BMIj1,BMIj2,……BMIjn2;
n3:BMIk1,BMIk2,……BMIkn3。
T2:定义所述“不能包含的BMI”分类中,各BMI所对应的逻辑位操作类型,以及三种分类中各BMI之间的逻辑位操作类型。
在本发明的实施例中,将“不能包含的BMI”的各BMI所对应的逻辑位运算类型定义为进行逻辑“非”操作。
同时,定义“可能包含的BMI”分类中,各查询条件之间的逻辑位操作类型为“或”操作;定义“必须包含的BMI”以及“不能包含的BMI”分类中,各查询条件之间的逻辑位操作类型为“与”操作。
当然,还可采用其他方式对各种分类的各BMI所对应的逻辑位操作类型进行定义。
T3:定义“可能包含的BMI”、“必须包含的BMI”、“不能包含的BMI”三个分类之间的逻辑位操作类型为“与”操作。
T4:将按照上述方式定义的三种类型的BMI进行排序。
在具体应用中,可按照任意的顺序对上述三种类型的查询条件BMI进行排序。
在本发明中,为了保证三种类型逻辑位操作的优先级相同,保证查询速度,按照如表1的方式对三种类型的BMI组合进行排序。
表1
按照表1所示的顺序,得到排序后的BMI序列BMIS:
BMIS:(BMIi1,BMIi2,……BMIin1)(BMIj1,BMIj2,……BMIjn2)(BMIk1,BMIk2,……BMIkn3)。
T5:按照T2中定义的三类BMI中,各BMI的逻辑位操作类型,得到第一操作数OP1。
第一操作数的生成规则如下:在所述查询条件序列中,根据是否为定义的“不能包含的查询条件”分类中各查询条件所对应的逻辑位操作类型,生成第一操作数。
针对本发明,在所述BMIS中,用1表示需要进行“非”操作的BMI所对应的逻辑位操作类型,用0表示不需要进行“非”操作的BMI。当然还可用其他的方式对上述的逻辑为操作类型进行定义,只要能区分开是否为“非”操作即可。
为了操作方便,按照上述的规则,从BMIS的低位开始(也可从高位开始定义),分别对BMIS中的各BMI进行定义,得到操作数OP1。OP1(左低位右高位)的格式如下:
BMIS:(BMIi1,BMIi2,……BMIin1)(BMIj1,BMIj2,……BMIjn2)(BMIk1,BMIk2,……BMIkn3)
OP1:
T6:在所述查询条件序列中,根据每两个查询条件之间的逻辑位运算关系,生成第二操作数OP2。
在本发明中,用1表示查询条件序列中前后两个BMI之间进行“或”运算,用0表示前后两个BMI之间进行“与”运算。各分类之间的逻辑运算关系为进行“与”运算,也即进行“或”运算的分类的计算结果,要分别与进行“与”运算的各查询条件,以及进行了“非”运算的各查询条件之间再进行“与”运算。
按照上述的规则,从BMIS的低位开始(也可从高位开始定义),得到操作数OP2。
BMIS:(BMIi1,BMIi2,……BMIin1)(BMIj1,BMIj2,……BMIjn2)(BMIk1,BMIk2,……BMIkn3)
OP2:
由于OP2描述的是查询序列中,两个查询条件之间的关系。当只有一个查询条件时是没有意义的,因此第一个查询条件对应的位恒置0,利用OP2进行运算时,该位对应为无操作。
通过上面的分析可以看出,OP1和OP2的位数均为W,与智能卡中CPU的位数相同,这就保证了利用本发明的方法进行查询的速度。因此,若得到的OP1和OP2的位数,与智能卡中CPU的位数不同,则用0补足。
T7:将BMIS和OP1、OP2送入到智能卡操作***中的运算单元,利用OP1和OP2确定的运算规则,对BMIS进行运算,得到最终的查询结果BMIend。具体如下:
T71:对BMIS先用OP1所确定的运算规则进行计算,即对各个查询条件BMIk1,BMIk2,……BMIkn3,分别进行“非”运算,得到各个查询条件的计算结果,表示形式如下:
T72:对BMIS按照OP2确定的规则,对(BMIi1,BMIi2,……BMIin1)进行“或”运算,得到结果BMI11。
T73:然后,将BMI11、BMIj1、BMIj2……BMIjn2、 之间进行“与”运算,得到最终的查询结果。
通过执行上述过程,避免了复杂的正则表达式的运算,快速的得到了最终的查询结果。同时,通过将进行“或”运算的分类的计算结果,分别与进行“与”运算分类中的各个查询条件,以及进行“非”运算后的“不能包含的查询条件”分类中的各个查询条件进行“与”运算,避免了现有技术中需要不断的将每两个查询条件的计算结果进行保存的步骤,节约了内存的占用,提高了查询的速度。
下面以一个具体的例子描述以下上述方法的具体实施过程。
假设当前有BMI序列BMIS包括BMI1,BMI2,BMI3,BMI4,BMI5,BMI6,BMI7。对所述BMI进行分类,假设其中“可能包含的BMI”的有BMI3、BMI7,“必须包含的BMI”的有BMI2、BMI6,“不包含的BMI”有BMI1、BMI4、BMI5,求此BMI序列的逻辑操作结果。
1)将BMIS分类排序得出操作序列:(BMI3BMI7)(BMI2BMI6)(BMI1BMI4BMI5),并确定n1为2,n2为2,n3为3,N=n1+n2+n3=7。
2)根据BMIS各BMI以及相互之间的逻辑操作,生成操作数OP1和OP2,具体编码见下表所示:
N |
n1 |
n2 |
n3 |
BMI |
BMI3 |
BMI7 |
BMI2 |
BMI6 |
BMI1 |
BMI4 |
BMI5 |
OP1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
OP2 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
假定当前智能卡CPU的位数W=8,将OP1、OP2补足为8位,则可得出OP1,用十六进制表示为:0x70(二进制表示为:01110000,不足8位时,在高位补0),OP2的十六进制表示为:0x02(二进制表示为:00000010,不足8位时,在高位补0)。
将BMI序列BMIS和OP1、OP2送入运算模块进行运算,得出最终结果BMIend。
本发明所述的方法不仅仅局限于应用在智能卡的数据库查询中,还可应用在其他领域中的数据库查询技术。
与本发明所述的智能卡中数据库的查询方法相对应,本发明还提供了一种智能卡中数据库的查询装置。
如图3所示,所述智能卡中数据库的查询装置包括如下模块:
分类单元,用于对查询条件进行分类;
序列生成单元,用于对分类结果进行排序,得到查询条件序列;
操作数生成单元,用于根据所述查询条件序列,生成操作数;
运算单元,用于按照所述操作数确定的运算规则,对所述查询条件序列进行运算,得到查询结果。
本发明所述的智能卡中数据库的查询装置,首先由分类单元对用户输入的查询条件进行分类,并由排序单元对所述查询条件进行排序,得到查询条件序列;并根据在查询条件序列中各查询条件或各查询条件之间的逻辑位操作类型,由操作数生成单元分别得到第一操作数和第二操作数。通过得到的第一操作数和第二操作数所定义的运算规则,对查询条件进行计算,最终由运算单元得到查询结果。这样,就避免了现有技术数据库查询技术中需要利用正则表达式进行的复杂运算。因此,本发明的方法大大提高了CPU的处理速度,加快了查询的速度。
如图4所示,所述序列生成单元包括:
第一操作类型定义模块,用于定义“不能包含的查询条件”分类中,各查询条件所对应的逻辑位操作类型。
在本发明中,将“不能包含的查询条件”分类中,各查询条件所对应的逻辑位操作类型定义为“非”运算。
第二操作类型定义模块,用于定义“可能包含的查询条件”分类中,各查询条件之间的逻辑位操作类型为“或”操作。
第三操作类型定义模块,用于定义“必须包含的查询条件”以及“不能包含的查询条件”分类中,各查询条件之间的逻辑位操作类型为“与”操作。
第四操作类型定义模块,用于定义“可能包含的查询条件”、“必须包含的查询条件”以及“不能包含的查询条件”三个分类之间的逻辑位操作类型为“与”操作。
排序单元,用于按照一定的顺序,排列与所述三种逻辑位操作类型相对应的三类查询条件,得到查询条件序列,并将所述查询条件序列送入到运算单元中。
为了提高查询速度,所述排序单元在排列顺序的时候,按照进行“或”、“与”、“非”逻辑位操作的顺序进行排序,得到查询条件序列:(“可能包含的查询条件”、“必须包含的查询条件”、“不能包含的查询条件”)。
所述操作数生成单元包括:
第一操作数生成单元,用于在查询条件序列中,根据是否为定义的“不能包含的查询条件”分类中各查询条件所对应的逻辑位操作类型,生成第一操作数。
在所述查询条件序列中,用1表示进行“非”逻辑位运算的查询条件;用0表示其它的查询条件。按照上述的方式,得到第一操作数。
第二操作数生成单元,用于在查询条件序列中,根据定义的每两个查询条件之间的逻辑位运算关系,生成第二操作数。
在所述查询条件序列中,用“0”表示“每两个查询条件之间进行的“与”运算;用“1”表示每两个查询条件之间进行的“或”运算,同时,第一个查询条件对应的位置0。按照上述的方式,得到第二操作数。
为进一步提高查询速度,所述第一操作数和第二操作数的位数,与智能卡操作***中CPU的位数相同,若第一操作数和第二操作数少于所述智能卡的CPU位数,则在第一操作数和第二操作数中用0补足。
在运算单元计算最终的查询结果时,首先按照第一操作数确定的运算规则,对“不能包含的查询条件”分类的各查询条件进行“非”运算,得到“不能包含的查询条件”分类中各查询条件的运算结果。再按照第二操作数确定的运算规则,对“可能包含的查询条件”分类的各查询条件进行“或”运算,得到“可能包含的查询条件”分类的运算结果;并与“必须包含的查询条件”分类的各查询条件,以及按照第一操作数运算获得的“不能包含的查询条件”分类中各查询条件的运算结果进行“与”运算。
综上所述,利用本发明所述的装置,根据定义的各BMI的逻辑位操作类型,以及各BMI之间的逻辑位操作类型,对各BMI进行排序所得到的BMIS,以及由第一、第二操作单元生成的OP1和OP2,所述的运算单元能够快速的计算出最终的查询结果,避免了现有的数据库查询技术中,需要利用正则表达式进行复杂的逻辑运算的麻烦。
当然,本发明的实施例还可有很多种,在不背离本发明的实施例精神及其实质的情况下,本领域技术人员当可根据本发明的实施例做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的实施例所附的权利要求的保护范围。