【发布时间】:2016-08-15 11:32:37
【问题描述】:
在 SQL 中,使用字符串连接进行参数化查询非常简单。例如,我根据预设参数(带有列名的字符串)从数据库表中获取必要的列
String id_column = "id", city_column = "city", streetname_column ="streetname", housenumber_column = "housenumber"; //Parameters
stmt = c.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT "+id_column+","+streetname_column+" FROM address" ); //How do the same in QueryDSL?
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 0; i < rsmd.getColumnCount(); i++){
System.out.print(rsmd.getColumnName(i+1)+" ");
}
while ( rs.next() ) {
System.out.print("\n");
for (int i = 0; i < rsmd.getColumnCount(); i++){
System.out.print(
rs.getString(rsmd.getColumnName(i+1)) + " "
);
}
}
我怎样才能做到这一点(你也可以做你自己的例子)QueryDSL请求:
List<Address> q1=queryFactory.selectFrom(address)
.fetch();
在这个查询中,我得到了整个表。
【问题讨论】:
-
您连接字符串以构建查询的示例非常糟糕。
PreparedStatement是避免 SQL 注入的方法。 -
@kayaman 我可以在 QueryDSL 中使用
PreparedStatement吗? -
@Kayaman ,我已经阅读了很多文档,但我仍然没有找到如何根据我的 JSON 参数选择任意表和列,例如我的前端。如果您与我分享这些能力描述的链接,这将非常有帮助。
-
听起来 QueryDSL 有一些糟糕的文档。考虑到 QueryDSL 是为“选择任意表和列”而构建的,奇怪的是他们的文档没有提到它。
-
@Kayaman 好的,谢谢,你能给个链接吗?
标签: java sql postgresql querydsl