2014-03-13 39 views
-1

我想讓用戶輸入正確的憑證,但是,我的else-if語句不起作用。我會很大,我的意思是非常感謝,如果有人能幫助我在這裏。Java數據庫否則如果不工作

在其他情況下耽擱了瑕疵!所以如果我輸入錯誤的證書,沒有任何問題。

我的代碼:

while(db.next()){ 
    if (first.equals(db.getString("name") && last.equals(db.getString("last")){ 
    try{ 
     con.autocommit(false); 
     String sql = "UPDATE details SET name = ('"+givenName+"') WHERE SET name = ('"+givenName+"') 
     PreparedStatement st = con.prepareStatement(sql); 
     st.executeUpdate(); 
     con.commit(); 
     con.setAutoCommit(true) 
    else if (!first.equals(db.getString("name") && !last.equals(db.getString("last")){ 
     System.out.println("Incorrect username or password"); 
} 

再次,我將不勝感激,如果有人可以幫助我,並解釋爲什麼我否則,如果不工作。

+2

「它不工作」是:

如果是這種情況下,雖然可能被改寫爲if (A && B) .. else if (!(A && B)) ..,我只想用else避免這種「問題」開始與建議可能是最糟糕的錯誤描述......你能更好地描述一下發生了什麼,爲什麼這不是你所期望的。 – fvu

+0

@fvu對不起,else-if塊中的語句沒有放置。如果我實際輸入了錯誤的細節,它不打印「不正確的用戶名或密碼」 – user2525364

+3

這看起來好像不會編譯。 – pamphlet

回答

0

乍一看,代碼中有一些語法錯誤。我真的不知道這是一個修剪版本還是完整的代碼。

檢查未關閉的if(以及它們未關閉的括號),try也缺少catch塊。在兩行中也缺少分號,其中一個也沒有關閉字符串文字。

現在,越來越入邏輯本身,這(我引用):

else if (!first.equals(db.getString("name") && !last.equals(db.getString("last")){ 
    System.out.println("Incorrect username or password"); 

是不恰當的,因爲除非你刪除如果一部分,並把它就像一個簡單的其他 ,您確實在聲明「不正確的用戶名和密碼」

1

if語句代碼似乎具有意圖矛盾。 (我故意忽略了許多其他問題,包括語法,不會編譯,這似乎是一個丟失「密碼檢查」。)

if (first.equals(db.getString("name") && last.equals(db.getString("last")) 
    // .. 
else if (!first.equals(db.getString("name") && !last.equals(db.getString("last")) 
    // .. 

使用替代品和改寫表達產生

if (A && B) 
    // .. 
else if (!A && !B) 
    // .. 

假設,該目標是始終運行ifelse if,則這產生了一個問題的代碼; !(A && B)的轉換爲!A || !B,由De Morgan's law而不是!A && !B寫在代碼中。

if (A && B) 
    // "valid" first/last names, but where is the password check? 
else 
    // otherwise, "invalid" first/last names 
+2

這不是一個合乎邏輯的矛盾。如果(A || B)應該把你放到else子句中。 –

+0

@IsaiahvanderElst矛盾「的意圖」,我會澄清。感謝您指出了這一點。 – user2864740

+0

我投了票,因爲答案是正確的,但投擲德摩根定律可以避免這個問題。雖然聲明是正確的,但我認爲這與這種情況沒有任何關係。 –