2014-09-27 29 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; 
}