2014-11-14 83 views
0

我有以下代碼,它查詢MySQL數據庫以檢查用戶是否是管理員。MySQL查詢返回使用公共字符串方法的字符串

public String admin() 
{ 
    String username = loginUserTF.getText(); 
    String password = loginPassPF.getText(); 
    String query = "SELECT * FROM userinfo where username=? and password=?"; 

    try { 
     connect.pst = connect.con.prepareStatement(query); 
     connect.pst.setString(1, username); 
     connect.pst.setString(2, password); 
     connect.rs = connect.pst.executeQuery(); 
     String admin = connect.rs.getString("Administrator"); 
     return admin; 
    } catch(Exception e){} 
} 

我知道return語句必須是在try和catch塊外,但隨後我不能返回Stringadmin。什麼是解決這個問題的方法?

+0

如果有異常則返回其他內容。 –

+0

如果發生異常,您希望發生什麼?你爲什麼不讓異常傳播給調用者? (順便提一下,我強烈建議不要僅僅捕獲Exception,而是捕獲一個更具體的異常,例如'SQLException'。) –

回答

1

只需將結果存儲在變量中,並在try塊後返回。

public String admin() 
    { 
     String result=null; 
     String username = loginUserTF.getText(); 
     String password = loginPassPF.getText(); 
     String query = "SELECT * FROM userinfo where username=? and password=?"; 
     try{ 
      connect.pst=connect.con.prepareStatement(query); 
      connect.pst.setString(1, username); 
      connect.pst.setString(2, password); 
      connect.rs = connect.pst.executeQuery(); 
      if (rs.next()) 
       result = connect.rs.getString("Administrator"); 
     } 
     catch(Exception e){ 
     } 

     return result; 
    } 

我也建議你不要讓你的catch子句爲空。你應該處理你遇到的任何異常。

+0

如果我在另一個calss中調用它,則使用此方法。然後結果等於空。爲什麼是這樣?爲什麼它不會保持爲Y或N. – BEE

+0

@BEE如果查詢不返回任何內容或發生異常,您將得到空值。首先檢查是否有異常 – Eran

+0

發生的異常是「空集上的非法操作」。我想這是因爲我從另一個jFrame調用這個方法,因此用戶名和密碼的文本字段沒有被讀取。有關如何解決此問題的任何提示? – BEE