sql / jdbc查询中的动态列

时间:2015-07-07 09:15:56

标签: java mysql database jdbc

我是计算机科学专业的学生。现在我正在使用jdbc开发一个项目。我必须在数据库中表 - USERROLE

每个USER都有一个或多个ROLE。我在ROLE.ID列中保存了ROLE(主键或USER.ROLE_ID)。

在java代码级别,我还有两个实体类 - User.javaRole.java。我可以通过连接这些表来进行简单的SQL查询。

请参阅以下查询 -

1。USER.NAME选择ROLE.NAMEUSER.NAME='admin' -

SELECT USER.NAME, ROLE.NAME FROM USER, ROLE
   WHERE USER.ROLE_ID = ROLE.ROLE_ID
   AND USER.NAME='admin';

2。USER.ID选择ROLE.IDUSER.NAME='admin' -

SELECT USER.ID, ROLE.ID FROM USER, ROLE
   WHERE USER.ROLE_ID = ROLE.ROLE_ID
   AND USER.NAME='admin';  

对于我选择的不同列,我必须为 ONLY 进行2次不同的查询。这里的大部分查询都是一样的。我的问题是,我可以做一些事情,以便我可以使用单个查询动态选择不同的(在第一种情况下 - USER.NAME,ROLE.NAME和第二种情况USER.ID,ROLE.ID)列类型吗?

2 个答案:

答案 0 :(得分:3)

不,你不会从JDBC那里得到这样的东西。你必须为此编写你的自定义函数。
在我看来,你应该创建一个函数,它接受两个参数或相同的重载函数,然后提供它们的参数。
在这里,我为你提供了一些逻辑的伪代码

        function getData(Param tableName, Param column1, Param column2){
        String sql = "SELECT "+column1+"','"+column2+"' 
                FROM `" + tableName + "` WHERE "+column1+" = "+column2;
        }

//overloaded
       function getData(Param tableName, Param column1, Param column2,Param column3){
        String sql = "SELECT "+column1+"','"+column2+"','"column3+"' 
                FROM `" + tableName + "` WHERE "+column1+" = "+column2;
        }


但是如果您准备使用某些API,那么我可以建议您使用两个非常好的API来赢得您的场景。你应该试一试Querydsl
JOOQ
Apache ddlUtils
squiggle-sql
{{3} }。

答案 1 :(得分:0)

怎么样?
SELECT USER.ID, USER.NAME, ROLE.ID, ROLE.NAME FROM USER, ROLE
   WHERE USER.ROLE_ID = ROLE.ROLE_ID
   AND USER.NAME='admin'; 

说实话,我真的没问题。