ifnull是mysql的函数,但要切换其他数据库不能使用该函数,所以查询出来的结果会有空。想用底层的jdbcAPI来对这结果做处理
你可以先执行 select ro.role_name as role_name ,rl.role_name_value as role_name_value ........
查询结果放到List里面,然后遍历list ,如果发现role_name_value是null,那么就把role_name的值赋值给role_name_value
处理完之后,这个List就是你想要的。
这个思路很简单,也很清晰,代码就需要写了吧~
在性能上差了点
@奶中有毒: 我明白你的意思了,你是想做一个jdbc 的接口,来实现这样的查询,这样就不要每次换数据库的时候去手动更改sql语句了。那我觉得思路很简单啊,不用去jdbc那样的底层去实现。你在你的Controller层中写一个接口,接口传入的参数为你的数据库配置文件里的数据库信息。接口内部根据不同数据库,返回不同的sql语句,或者直接执行不同的sql语句,返回结果。
关键就在你这个切换数据库的操作,你的数据库是经常切换吗?
@Shendu.cc: 这个就不是我们这码代码的问题了,上面头头是需要能搞个通用的,最好避免使用各自数据库的函数,之前是sqlServer切mybatis,都快改了我们一个月,现在发现mybatis不兼容一些东西,数据库又要改回去,并且把项目spring+status改成ssm,但项目还是用的ssm框架,基于mybatis数据库的映射方便。所以就出现现在的问题,mysql的函数不兼容sqlServer了。
@奶中有毒: 如果你们真的有数据库频繁切换的需求,那么写一个封装所有数据库查询接口,类似于EntityFramework这样的东西。虽然不用像EF那样全面,就是适用你们的项目也是一个不小的工程。如果你们只是遇到问题暂时需要切换,以后是只使用一种数据库,那么搞这个通用的显然没有必要啊,既然都要切换数据库,那么代码更改就避免不了,而且没有那种频繁切换的需求的情况下去写这样一个东西实在是没必要。
任何一个项目也不会随意切换数据库,这是一个消耗很大成本的操作。你们的项目以后肯定是固定使用一种数据库。
@Shendu.cc: 刚才问了同事,原来我们这项目之前就有两套,mysql和sqlServer的,就是用你上面那种方法写的,读取不同配置文件和sql语句.......。
想到换数据库,却没想到这样的查询性能是很差的,如果可能,在设计上就应该防止这种情况的出现。
嗯,这样性能是差,这是没办法的办法,想用jdbc底层来做处理,就是想寻求这样的方法
@奶中有毒: 看了一下几个回复。
你想要的东西很小的概率能问到,要实现估计也不是不可以,只是需要时间而已,比如你自己写三个月或者半年。肯不肯花这个时间成本就得看你们的头如何看待了。
直接换对应函数。
如果又要改数据库,这又会要做修改,这不是个好的办法
@奶中有毒: 那试问你换库就不改配置文件?分页在不同数据库sql语法能一样?除非你再加个适配层,前面使用一种标准语言 —— 当然java没得ef这种玩意儿,你要用ef就没这个问题了。
对于这种东西根本不存在跨库一说,简单的办法——你只有不同的库用不同的配置文件。
@花飘水流兮: 数据库配置都改了,这里希望能够解决之后迁移数据库而写通用sql,尽量避免使用某个数据库的独有函数。现在出现这问题,希望能在Java后台来改,当然也包括上面说到的性能问题
你想想看 各个数据库多多少少 有各自的 特有的特性 函数 等等的。 按照你头头的 要求 不是 简单的 hacker .而是要找到所有不同点 封装成 通用的、 难道他不考虑成本的么。。。。。