2012-11-19 70 views
0

我想從列號獲取字符串。 4從我的數據庫檢查用戶權限。如何從選擇查詢中獲得另一個字符串?

我可以使用rs.getString(index)擺脫列四號數據? 我要檢查user's特權......所以,如果列數據等於4,網頁會被重定向到AdminControlPanel.jsp ,但這段代碼doesn't工作:(

String user=request.getParameter("login"); 
String pass=request.getParameter("password"); 
Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/android","root","root"); 
      Statement st=con.createStatement(); 
      ResultSet rs=st.executeQuery("select * from users where login='"+user+"' and password='"+pass+"'"); 
      String p = rs.getString(4);     
      int count=0; 
      while(rs.next()){ 
      count++; 
      } 
     if(count>0 && p == "4"){ 
      // out.println(rs); 
          response.sendRedirect("AdminControlPanel.jsp"); 
         } 
      else{ 
       out.println("aaa"); 
       response.sendRedirect("#"); 
      } 
     } 
       catch(Exception e){ 
    System.out.println(e); 
} 
+0

該代碼如何工作?任何錯誤?不是預期的結果?請解釋。 –

+0

不要選擇'*',只選擇你實際使用的柱子。還使用準備好的陳述和衛生輸入。 – BigMike

+0

代碼似乎很好,你可以直接採取任何列的值,你面臨的錯誤是什麼? –

回答

0

你比較兩個字符串對象,而不是字符串檢查值。

只是將代碼更改爲p.equals(「4」)並嘗試。

0

你想

while (rs.next()) { 
    String val = rs.getString(4); 
    .... 

注意,通過ResultSet遍歷的行迭代。對於每一行,列索引,從「1」開始。

但是它的安全得到按列名,因爲你的SQL查詢不指定既不列,也不在他們返回的順序:從我看到

String val = rs.getString("COLUMN_NAME"); 

下面,你需要一個整數。檢查出ResultSet的文檔的詳細信息,但是:

int val = rs.getInt("COLUMN_NAME"); 

順便說一句,我沒有看到你在上面關閉您ResultSet/Statement/Connection。如果你不是,那麼你需要!

+0

我將其更改爲我的專欄名稱,但效果類似。它不會將我重定向到AdminControlPanel.jsp 如果列類型是int,應該如何使用? – steven967

0
String p = rs.getString(4); // This should be inside your while     
int count=0; 
while(rs.next()){ 
    count++; 
} 
  • 你應該將你的第一行的while循環內。你不能 讀取行的列,直到您將光標移到使用res.next()該行 。

  • 此外,由於你的數據庫最好能有隻oneusernamepassword一個 組合記錄。所以,你可以更好地使用 if而不是while

  • 而你並不真的需要一個count變量存在。

所以,你的代碼應該是: -

ResultSet rs=st.executeQuery("select * from users where login='"+user+"' " + 
           "and password='"+pass+"'"); 
if (rs.next()) { 
    String p = rs.getString(4); // Note that using Column name is a better idea 

    // or rs.getInt(4) if the column type is `int` 

    if(p.equals("4")) { // Use equals method to compare string content 
     response.sendRedirect("AdminControlPanel.jsp"); 

    } else{ 
     out.println("aaa"); 
     response.sendRedirect("#"); 
    } 
} 

另外請注意,您應該使用equals方法比較你的字符串。 if (p == "4")會給你錯誤的結果。 ==運算符不會比較字符串的內容,而是比較使用的引用的內容。

+0

謝謝,這可以幫助我 – steven967

+0

@ vesely.mladenec ..不客氣:) –

相關問題