В SQL очень просто сделать параметризованный запрос, используя конкатенацию строк. Пример, где я получаю необходимые столбцы из таблицы БД в соответствии заданных параметров (строки с именами столбцов)Запрос QueryDSL с параметрами, возможно ли это?
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
@kayaman и могу ли я сделать 'PreparedStatement' в QueryDSL? –
Звучит так, будто вы не читали никакой документации. – Kayaman