使用例外来通知用户名是否可用

时间:2012-05-17 05:59:34

标签: java exception exception-handling

让我们说我有一个表(登录),其中包含用户名(唯一密钥)和密码,用于登录。

现在,在注册模块中(通过在登录表中添加新行来创建新帐户),如果我只执行插入并检查SQLException()引发时用户名是否已经在表中,是否可以???。这是一个很好的做法吗?

以下是注册模块的示例:

enter code here
String uname = request.getParameter("username");
String passwd = request.getParameter("password");
try
{
  statement.executeUpdate("insert into login(username,password) values (" + uname + "," + passwd + ")");
}
catch(SQLException e)
{
   if((e.getErrorCode())==1) //error code when primary key violated
   {
      // username already exists....
   }    
   //some other code
 }

 //username is available....rest of the code goes here

在第一个地方,我想到了一个选择查询来检查用户名(用户是否在注册时输入)已经在表格中....但对我来说似乎是多余的

因为我认为,即使这样做也不会阻止DBMS检查唯一性违规,对吧?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我建议在插入之前进行验证,以防您更改基础数据库,以更改SQLException.getErrorCode()中的错误代码。这也使您能够在用户提交表单之前进行验证。您可以创建自定义例外,通知您的服务调用者该用户名已在使用中。

  

检索此SQLException的特定于供应商的异常代码   对象

SELECT COUNT(*) FROM LOGIN WHERE USERNAME = :username

通过服务方法,例如:

public class UserService {

    public boolean isValidUsername(String username) {
        //validate
    }
    public void registerUser(User user) throws UsernameInUseException {
        if(!isValidUsername(user.getUsername()) {
            throw new UsernameInUseException("Usernaame " + user.getUsername() + " is already in use.");
        }
        // continue
    }

}

答案 1 :(得分:0)

如果您可以在表单提交之前告诉用户使用AJAX调用已经存在用户名,那将会很酷。