简体   繁体   中英

Dynamic column in sql/jdbc query

I am a student of Computer Science. Now I am working on a project with jdbc. I have to table in database - USER , ROLE .

Where each USER have a one or multiple ROLE . I save the ROLE.ID (primary key or ROLE ) in USER.ROLE_ID column.

In java code level I have two entity class also - User.java and Role.java . I can make the simple SQL query with joining these tables.

Please see the following queries -

1. Selecting USER.NAME and ROLE.NAME for USER.NAME='admin' -

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

2. Selecting USER.ID and ROLE.ID for the USER.NAME='admin' -

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

I have to make 2 different queries ONLY for the different columns I am selecting. Here most of the query is same. My question is can I do something so that I can dynamically select different (in first case - USER.NAME, ROLE.NAME and Second case USER.ID, ROLE.ID) types of column using a single query?

No, You will not have anything like this from JDBC.You have to write your custom function for this.
In my opinion, you should just make a function which is taking two parameters OR the same overloaded functions and then provide them arguments.
here I am providing you some pseudo code for logic

        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;
        }


But if you are ready to use some APIs then I can suggest you two very good API to win your scenario. you should give a try to
Querydsl
JOOQ
Apache ddlUtils
squiggle-sql
JaQu
.

What about

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

?

I don't really get the question here to be honest.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM