2015-04-20 82 views
1

我得到這個:方法休眠選擇

Query query = session.createQuery(" 
    from Osoba 
     WHERE (zainteresowania LIKE '%iOS%') 
     and (zainteresowania LIKE '%Java%') 
     and (zainteresowania LIKE '%Android%')" 
    ); 

這工作正常,但我需要一個會問我的方法:你要搜索什麼?我可以告訴它:Android和Ubuntu 這意味着它必須在col zainteresowania的數據庫中搜索那兩個phraes,如果有人擁有它,那麼我就打印它。

正如我所說的,這是它是如何存儲在山坳的例子:

  1. 的Java
  2. Platforma .NET(C#)
  3. 的Android
  4. 的iOS
  5. 的Windows Phone
  6. Testowanie aplikacji

回答

2

您可以使用定位參數或編號參數,如下所述動態參數傳遞給你的SQL查詢:

定位參數

String input1=// got from user 
    String input2=// got from user 
    Query query = session.createQuery("from Osoba WHERE (zainteresowania LIKE ?) and (zainteresowania LIKE ?)") 
.setString(0,"%"+input1+"%") 
.setString(1,"%"+input2+"%") 
.list(); 

命名參數:

String hql = "from Osoba WHERE (zainteresowania LIKE :user_input1) and (zainteresowania LIKE :user_input2)"; 
List result = session.createQuery(hql) 
.setParameter("user_input1", "%Java%") 
.setParameter("user_input2","%Android%"); 
.list(); 

有關更多信息,請參閱here

+0

在位於參數,你的意思是'.setString(1, 「%」 +輸入2 + 「%」)',我認爲第二種方法將_Named Parameters_,而不是_Numbered Parameters_。 –

+0

是的,你是正確的 – Sridhar

+0

好吧,但有沒有辦法dynamiclly決定有多少參數用戶通過? – arienn

0

你的方式幫了我很大的忙。我也能夠「動態地」做到這一點。

這裏是我的代碼:

String input3 = (""); 
     String input4 = (""); 
     String input5 = (""); 
      Scanner in = new Scanner(System.in); 
      System.out.println("First"); 
      String input1 = in.nextLine(); 
      System.out.println("Second(empty field to break)"); 
      String input2 = in.nextLine(); 
      if (!input2.isEmpty()) 
        { 
      System.out.println("Third(empty field to break)"); 
      input3 = in.nextLine();   
      if (!input3.isEmpty()) 
       { 
      System.out.println("Fourth(empty field to break)"); 
      input4 = in.nextLine(); 
      if (!input4.isEmpty()) 
       { 
      System.out.println("Fifth(empty field to break)"); 
      input5 = in.nextLine(); 
       }  
       } 
       } 



      Query query = session.createQuery("from Osoba WHERE (zainteresowania LIKE ?) and (zainteresowania LIKE ?) and (zainteresowania LIKE ?) and (zainteresowania LIKE ?) and (zainteresowania LIKE ?)"); 
      query.setString(0,"%"+input1+"%"); 
      query.setString(1,"%"+input2+"%"); 
      query.setString(2,"%"+input3+"%"); 
      query.setString(3,"%"+input4+"%"); 
      query.setString(4,"%"+input5+"%");