2014-02-19 39 views
0

當輸入的用戶存在於數據庫中時,結果集的if部分會運行,但如果不存在,則else部分不會。爲什麼?使用數據庫進行登錄驗證

這是我的代碼。

String thisname=request.getParameter("username"); 
String thispwd=request.getParameter("password"); 

//Query for selecting user name and password from database. 
String query = "select * from login where username=?"; 
pstmt = (PreparedStatement) con.prepareStatement(query); 
pstmt.setString(1, thisname); 
res = pstmt.executeQuery(); 

while(res.next()) 
{ 
    System.out.println("hhh"); 

    if ((thisname.equals(res.getString("username"))) && (thispwd.equals(res.getString("password")))) 
    { 
     System.out.println("hello");            
    }    
    else 
    { 
     System.out.println("in"); 
     session.invalidate(); 
     response.sendRedirect("index.html"); 
    }  
} 
+4

因爲'res'具有空結果集,'res.next()'返回false。沒有執行'while循環' –

+0

考慮使用JAAS在Servlet中進行認證和授權。 – Puce

回答

2

@ user1069186:這是因爲如果輸入的用戶不存在,那麼在這種情況下res.next()總是返回false和控制絕不會進去一會兒。所以在你的代碼中沒有使用else部分。

嘗試使用下面的修改後的代碼:

String thisname=request.getParameter("username"); 
String thispwd=request.getParameter("password"); 

//Query for selecting user name and password from database. 
String query = "select * from login where username=?"; 
pstmt = (PreparedStatement) con.prepareStatement(query); 
pstmt.setString(1, thisname); 
res = pstmt.executeQuery(); 

if(res.next()) 
{ 
    System.out.println("hhh"); 
    if ((thisname.equals(res.getString("username"))) && (thispwd.equals(res.getString("password")))) 
    { 
     System.out.println("hello");            
    }    
}else { 
    System.out.println("in"); 
    session.invalidate(); 
    response.sendRedirect("index.html"); 
} 

讓我知道如何去。

+0

perfect.working。謝謝 – Coder17

1

@SuneetBansal正確。否則使用這種方法。

String thisname=request.getParameter("username"); 
    String thispwd=request.getParameter("password"); 

    //Query for selecting user name and password from database. 
    String query = "select * from login where username=?"; 
    pstmt = (PreparedStatement) con.prepareStatement(query); 
    pstmt.setString(1, thisname); 
    res = pstmt.executeQuery(); 

    while (res.next()) 
    { 
     thisname= res.getString("username"); 
     thispwd= res.getString("password"); 
     break; 
    } 
res.close(); 
pstmt.close();