利用反射处理多个表结构相同的数据的查询和数据库表的关联
Posted 可爱的呆子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用反射处理多个表结构相同的数据的查询和数据库表的关联相关的知识,希望对你有一定的参考价值。
最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样
前期将各个表中的字段也进行了统一
抽象出一张字典表
将街道编号和街道的名字的首字母连接起来,因为查询的时候是利用街道编号来的,这样可以根据街道标号拼出相对于的街道表的名字,(每个人口相关的表不止一张,因此需要统一);在查询过程中,将查询到的结构返回一个LIST,(不同的表在dao中当然对于不同的类啊,返回来再判断是哪一类),然后利用反射Field[] fields = List.get(i).getDeclaredDields()获得具体的属性。拼出json文件返回前台。
这还不算,很多信息需要关联其他表,比如社区信息,社区信息需要根据街道信息才能查出来,但是不在同一张表中,因此反射回来以后,根据结果中的街道信息,再关联其他表求社区信息,刚开始的时候总出错,原来是我在设计对应的forms,数据库结果的java类时,申明与社区有关的信息在前,而街道在后,那么反射回来遍历属性的时候,先遍历到社区相关信息,而不是街道,就不能根据街道求出社区具体信息所在的表,社区相关信息也就没有又有意义了。
同时在数据库中拼sql语句时,发现在直接在语句里加参数,而不是通过参数数据进行传参时,需要加单引号啊
另外,=与in是不一样滴
附:
用的表有,
人口基本信息表 jiedao1peopleinfo;字段 名,性别,为了方便返回来以后我去求社区,我加了街道编号字段,社区相关信息1
社区表:社区名,编号
关联表:社区关联信息1,社区表的编号
字典表:街道编号,街道首字母
为了方便,我将所有表名字进行规范化,查询的时候,通过街道编号,查到街道首字母,这样就可以找到相关街道的人口表,社区表,关联表
返回人口信息里面的内容,然后我需要向前台返回名,性别,街道,社区,这样我还需要根据返回的街道编号,求出相关街道对应的表,定位到这个街道的关联表,根据前台给出的关联信息,找到社区表编号,再根据编号,找到社区名。
如果前台没有给参数,我就需要从多个街道取数据,这样关联起来几百个表,我直接新建立一个表,将人口基本信息统一到一张表里,直接插用
insert into table_c
select * from table_b
union
select * from table_a
开始还可以,但是后来有问题了,那个人口表里有日期数据,原来输入的时候输错了,格式不对,导致不能插入,这几十万条数据我不能一条一条看吧,我就只把用的数据插进去了,方法也简单,把星号换成具体的字段列名。
我通过街道编号是否存在来判断前台输入参数是否全面,通过这样建表,对于参数输入不确定的问题就解决了
以上是关于利用反射处理多个表结构相同的数据的查询和数据库表的关联的主要内容,如果未能解决你的问题,请参考以下文章