2016-08-15 3 views
1

SQLでは、文字列連結を使用してパラメータ化されたクエリを作成するのは非常に簡単です。たとえば、私は、この(あなたもあなた自身の例を作ることができる)QueryDSL要求と同じことを行うことができますどのように設定したパラメータ(カラムの名前の文字列に)パラメータを指定した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)) + " " 
       ); 
      } 
     } 

に従ってDBテーブルから必要な列を取得しています:

List<Address> q1=queryFactory.selectFrom(address) 
        .fetch(); 

このクエリでは、テーブル全体を取得しています。

+1

クエリを構築するために文字列を連結するあなたの例は本当に悪いです。 'PreparedStatement'はSQLインジェクションを避けるための方法です。 – Kayaman

+0

@ kayamanとQueryDSLで 'PreparedStatement'を実行できますか? –

+0

あなたはどんなドキュメントも読んでいないように聞こえます。 – Kayaman

答えて

0

最後に、私は答えを見つけました。ソリューションは、このページにあります: Examples of using play.db.jpa.JPAApi

そして、私の質問の文脈では、解決策は以下の通りです:

package controllers; 
import play.db.jpa.JPAApi; 
import play.db.jpa.Transactional; 
import javax.inject.Inject; 
import javax.persistence.Query; 
import java.util.ArrayList; 
import java.util.List; 

public class TestingReportsDep{ 

private JPAApi jpaApi; 
@Inject 
public TestingReportsDep(JPAApi jpaApi) { 
    this.jpaApi = jpaApi; 
} 
Object[] tempObj; 

@Transactional 
public void resolving_requests) { 
    String id_column = "id", city_column = "city", streetname_column ="streetname", housenumber_column = "housenumber"; //Parameters 
    String request="SELECT "+id_column+","+streetname_column+" FROM address;"; 
    jpaApi.withTransaction(entityManager -> { 
     Query query = entityManager.createNativeQuery(request); 
     int ResultsAmount = query.getResultList().size(); 
     List Result = query.getResultList(); 
     System.out.print("\n\n\nNew super query by Bogdan:\n"); 

     for(int i=0; i< ResultsAmount; i++){ 
      tempObj = (Object[]) Result.get(i); 

      System.out.print(tempObj[0]+" "+tempObj[1]+"\n"); 
     } 
     return null; 
    }); 
} 
} 
関連する問題