利用反射处理多个表结构相同的数据的查询和数据库表的关联
最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样
前期将各个表中的字段也进行了统一
抽象出一张字典表
将街道编号和街道的名字的首字母连接起来,因为查询的时候是利用街道编号来的,这样可以根据街道标号拼出相对于的街道表的名字,(每个人口相关的表不止一张,因此需要统一);在查询过程中,将查询到的结构返回一个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
开始还可以,但是后来有问题了,那个人口表里有日期数据,原来输入的时候输错了,格式不对,导致不能插入,这几十万条数据我不能一条一条看吧,我就只把用的数据插进去了,方法也简单,把星号换成具体的字段列名。
我通过街道编号是否存在来判断前台输入参数是否全面,通过这样建表,对于参数输入不确定的问题就解决了