2014-11-20 22 views
5

Ho un accesso di classe che ha userId, username e password.selezionare la query in sospensione con la clausola where

Per un utente di accesso Sto verificando username e password e ottengo userId. Se userId non è zero, verrà visualizzata la pagina iniziale. Sto cercando di farlo in letargo. Ma la mia domanda non sta funzionando

public int userLogin(Login login) 
     throws MySQLIntegrityConstraintViolationException, SQLException, 
     Exception { 

    Session session = HibernateUtil.getSessionFactory().openSession(); 
    int userId = 0; 

    try { 
      session.beginTransaction(); 
      String hql = "Select log.userId from Login log where log.userName=:userName 
      and log.password=:password";  
      System.out.println(hql); 
      Query query = session.createQuery(hql); 
      query.setParameter(":userName", login.getUserName()); 
      query.setParameter(":password", login.getPassword()); 
      List result = query.list(); 

      System.out.println("resultset:"+result); 

      Iterator iterator = result.iterator(); 
      while(iterator.hasNext()){ 
       userId = (int) iterator.next(); 


     } 
    } catch (HibernateException e) { 
     if (session.getTransaction() != null) { 
      session.getTransaction().rollback(); 
     } 
    } finally { 
     session.close(); 
    } 
+0

@AbhikChakraborty, Nessuna necessità di ":" :) –

+1

Hai qualche eccezione? O solo una lista dei risultati vuota? Per favore pubblica più dettagli su _ "la mia query non funziona" _. – icza

+0

Quindi, quale errore si sta affrontando? qualsiasi eccezione .. – RE350

risposta

6

1) Si utilizza HQL, quindi è necessario capire che non si può dare i nomi delle colonne che sono nella base di dati nelle proiezioni di interrogazione HQL

String hql = "select user_id from login where user_name= :username and 
      password= :password"; 

Qui nella tua classe Login non hai campo come user_id e hai dato user_id in proiezioni. Classe di mappe HQL con database, quindi la classe di accesso effettuerà il login e il campo userId sarà colonna user_id nel database. E quello che hai scritto è semplice query SQL non query HQL.

Utilizzare questa query HQL.

String hql="Select log.userId from Login log where log.username=:username and log.password=:password" 

Qui il log è un nome alias come facciamo in Java normale.

Login log=new Login() 
log.userId 
2

Non utilizzare i due punti durante l'impostazione del parametro.

query.setParameter("userName", login.getUserName()); 
Problemi correlati