我是计算机科学专业的学生。现在我正在使用jdbc开发一个项目。我必须在数据库中表 - USER
,ROLE
。
每个USER
都有一个或多个ROLE
。我在ROLE.ID
列中保存了ROLE
(主键或USER.ROLE_ID
)。
在java代码级别,我还有两个实体类 - User.java
和Role.java
。我可以通过连接这些表来进行简单的SQL查询。
请参阅以下查询 -
1。为USER.NAME
选择ROLE.NAME
和USER.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.ID
和USER.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)列类型吗?
答案 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';
说实话,我真的没问题。