2017-09-05 136 views
0

我想檢查一個條目是否存在於我的表中。我已經使用了以下資源並在mysql workbench中運行代碼以查看我是否運行了錯誤,但事實並非如此。JDBC檢查是否存在條目

檢查的ResultSet填充 - >Is ResultSet Filled

SQL語法 - >SQL

這是當前的代碼我跑

public static Boolean exists(Table t, int userId){ 
    boolean e = false; 
    if (connection != null){ 
     try { 
      String SQL = "SELECT EXISTS(SELECT 1 FROM " + t.table + " WHERE id = " + String.valueOf(userId) + ")"; 
      System.out.println(SQL); 
      stmt = connection.createStatement(); 
      ResultSet rs = stmt.executeQuery(SQL); 
      if (isFilled(rs)) 
       e = true; 
     } catch (SQLException l) { 
      l.printStackTrace(); 
     } 
    } 
    return e; 
} 
public static boolean isFilled(ResultSet rs){ 
    boolean isEmpty = true; 
    try { 
     while(rs.next()){ 
      isEmpty = false; 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return !isEmpty; 
} 

問題一直存在,返回true,不管我輸入的用戶ID

回答

0

因此,根據你的問題,你想檢查一行是否可用與相應的ID。

因此,您可以輕鬆地做到這一點。

String sql_res= "select * from students where sid=2"; 
rs=st.executeQuery(sql_res); 

,然後檢查該行是存在或不

//it will print true if a row exists for the given id and false if not. 
    System.out.println(rs.next()); 
1

EXISTS已經返回一個布爾結果,所以你會永遠ve 1行中的ResultSet

檢查保證存在的返回值或從查詢中刪除EXISTS子句,其中將返回零行或一行(值爲1)。

+0

我不明白的時候我在mysql工作臺上運行這個腳本,它返回一個,所以isfilled應該返回true,因爲它大於0,所以它應該全部檢查問題是如果我使用一個不存在的ID它仍然是真實的,雖然填充應該因爲返回false它沒有填充結果集爲0 –

+0

您正在檢查結果集是否有任何行。你總是有一排。無論是「1」還是「0」。但是'0'與沒有行是不一樣的。我給了你兩個選擇做什麼。 – Kayaman

0

如果算上結果,你總是會得到一個正確的答案:

PreparedStatment ps = connection.prepareStatement("select count(*) from students where sid = ?"); 
ps.setInt(1,userId); 
ResultSet rs = ps.executetQuery(); 
int n = 0; 
if (rs.next()) { 
    n = rs.getInt(1); 
) 
if (n > 0) { 
    // do what ever you need, if the row exists 
}