2016-04-03 26 views
1

Bu yöntem, bir sebepten dolayı her zaman yanlıştır. Doğru kimlik bilgilerini girdim ve denedim ancak arayanı yanlış yönlendirdim. Lütfen yardım et. 1 değil 0 ile PreparedStatement başlangıç ​​içinÇalışmak için oturum açma uygulaması alınamadı

public Boolean validate(String username, String password) { 

    System.out.println(username); 
    System.out.println(password); 

    try { 

     Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/login?"+"user=Naveen&password=Naveen"); 

     String sql = "select * from login.user where username=? and password=?"; 

     PreparedStatement pst = conn.prepareStatement(sql); 

     pst.setString(0, username); 
     pst.setString(1, password); 

     ResultSet rs = pst.executeQuery(); 

     if(rs.next()){ 
      return true; 
     }else{ 
      return false; 
     } 

    } catch (Exception e) { 
     return false; 
    } 
} 
+2

Ayrıca almak için catch bloğunda System.out.println (e) ekleyin (bu yararlı olacak konsolda hata mesajı yazdırmak en az) doğru şekilde Exceptions işlemelidir gerçek hata. Kodunuza göre aldığınız hata her halükarda false olarak döner ve – LearningPhase

+0

numaralı hatayı işaret etmez. Bunu yapacağım, teşekkürler! –

cevap

3

Parametre indeksleri. parametrelerini ayarlamak için uygun bir yol olacaktır:

PreparedStatement pst = conn.prepareStatement(sql); 
pst.setString(1, username); 
pst.setString(2, password); 

Ben de böyle Connection veya PreparedStatement olarak Closeable kaynaklar için deneyin-ile-kaynaklar blokları kullanmanızı öneririz. Ya da en azından Java'yı önceden 7 kullanıyorsanız, son olarak bloke edin.

0

Kök durum, kodun her zaman catch bloğuna girmesi ve false değerini döndürmesidir.

PreparedStatement belirtme çizgisi için doğru dizinler kullanmalısınız. Fisrt 1, 0 yerine 1 olmalıdır.

Not: Ayrıca