2013-10-10 64 views
0

我想做一個登錄表單與從數據庫中提取記錄,它成功地運行時,記錄是在第一個位置,但是當它在第二個位置,它首先給記錄未找到輸出,然後找到記錄。我想做一個登錄表格與從數據庫中提取記錄

這是我的實例代碼。

for(int i=1;i<noOfColumn;i++) 
{   
    while(rs.next()) 
    { 
     if(x.equals(rs.getString(1))) 
     { 
      if(kk.equals(rs.getString(2))) 
      { 
       JOptionPane.showMessageDialog(l1, "Logged in successfully"); 
       break; 
      } 
     } 
     else 
      JOptionPane.showMessageDialog(b1, "Log in Failed"); 
    } 
} 
+0

是什麼外部for循環for? – MadProgrammer

+0

請發佈您以前用於登錄 – Ajeesh

回答

3

你並不需要一個for循環和下面的代碼可以工作,但是這是沒有效率的,所以請張貼我們的查詢您使用的東西,

使用查詢像SELECT * FROM TABLE_NAME其中username = x和password = kk。 如果你有一個有效的用戶名和密碼的記錄,那麼你的while循環將被執行。

PreparedStatement statement = sqlConnection.prepareStatement("SELECT userId, password FROM login where username=? and password=?"); 
statement.setString(1, unametype); 
statement.setString(2, passwordtype); 
ResultSet rs = statement.executeQuery(); 
// It is better to use prepared statement rather than executing sql strings directly. Because if you use sql string you might face sql injection attacks 


boolean flag=false; 

while(rs.next()) 
{ 
    flag=true;  
} 

if(flag) 
    JOptionPane.showMessageDialog(l1, "Logged in successfully"); 
else 
    JOptionPane.showMessageDialog(b1, "Log in Failed"); 
+1

+1的查詢,因爲提取所有內容都是(imho)無意義的。抓取你需要的東西,看看查詢是否成功是結果,並且應該快得多。 – Stefan

0

我不認爲有必要對你有一個for循環 你只需要通過執行SQL語句來獲取結果集,並遍歷它像

PreparedStatement statement = sqlConnection.prepareStatement("SELECT userId, password FROM login where username=? and password=?"); 
statement.setString(1, unametype); 
statement.setString(2, passwordtype); 
ResultSet rs = statement.executeQuery(); 
while(rs.next()){ 
    if(rs.getString(1).equals(usernametype)){ 
     if(rs.getString(2).equals(passwordtype)){ 
      // successful message 
     }else{ 
      // invalid password 
     } 
    }else{ 
     // invalid username 
    } 
} 
相關問題