2014-09-27 50 views
-1

我需要在輸入詳細信息時檢查用戶名的可用性。任何人都可以告訴我如何在Java中不使用hibernate的情況下做到這一點?如何檢查用戶可用性

public static boolean checkUseName (String username) { 

    boolean status = false; 

    try { 
     Connection con = DB.myCon(); 
     Statement S = con.createStatement(); 
     String query3 = "select userId from employee where userId ='"+username+"'"; 

     ResultSet rs = S.executeQuery(query3); 
     status = rs.equals(""); 

    } catch (Exception e) { 

     e.printStackTrace(); 

    } 

    return status; 
} 
+0

這不是一個代碼編寫的服務。請展示一些努力 – msrd0 2014-09-27 09:39:31

+0

這裏是代碼什麼樣的嘗試......但無法得到我期望的結果 – 2014-09-27 10:00:49

+0

因爲你的請求要求一個特定的'userId',你所要做的就是檢查結果集是否包含一行。因此,對['rs.next()'](http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#next())的單個調用就足夠了。如果它返回'true',則至少有一行含有'userId'。但是您應該瞭解如何使用'PreparedStatement's而不是串聯SQL'String'。否則,有一天你會成爲[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)的一個維護者...... – Holger 2014-09-27 13:30:38

回答

0

你的錯誤是在這裏:

rs.equals("") 

這將始終返回false,因爲ResultSet是永遠等於String。你想要做的是檢查ResultSet是否爲空。

這並不容易,因爲它似乎是因爲沒有isEmpty()方法,所以你需要計算所有行,像這樣:

String query3 = "SELECT COUNT(*) FROM employee WHERE userId ='"+username+"'"; 
ResultSet rs = S.executeQuery(query3); 
status = (rs.getInt(0) == 0); // Note that rs can be null here 

這將計算所有行從表employee與給定條件(WHERE userId ='"+username+"')。然後,你可以檢查計數是否爲0

0

它與下面的代碼工作:

public static boolean checkUseName (String username) { 

    boolean status = false; 

    try { 
     Connection con = DB.myCon(); 
     Statement S = con.createStatement(); 
     String query3 = "SELECT COUNT(*) FROM employee.user WHERE userId ='" + 
       username + "'"; 

     ResultSet rs = S.executeQuery(query3); 
     boolean next = rs.next(); 
     int a = rs.getInt("COUNT(*)"); 

     status = (a == 0); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return status; 
}