Java 使用异常通知用户名是否可用

Java 使用异常通知用户名是否可用,java,exception,exception-handling,Java,Exception,Exception Handling,假设我有一个表(login),其中包含用户名(唯一键)和密码,用于登录目的 现在,在注册模块(通过在登录表中添加新行来创建新帐户)中,当SQLException()引发时,我是否可以执行insert并检查用户名是否已经在表中???。这是一个好的做法吗 以下是注册模块的一个示例: enter code here String uname = request.getParameter("username"); String passwd = request.getParameter("passwor

假设我有一个表(login),其中包含用户名(唯一键)和密码,用于登录目的

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

以下是注册模块的一个示例:

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

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

因为我认为,即使这样做也不能阻止DBMS检查唯一性冲突,对吗


提前感谢。

我建议在插入之前进行验证,以防您更改基础数据库,从而更改中的错误代码。这还允许您在用户提交表单之前进行验证。您可以创建自定义异常,通知服务调用方用户名已在使用中

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

通过服务方法,例如:

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
    }

}

我建议您在插入之前进行一次验证,以防更改基础数据库,从而更改中的错误代码。这还允许您在用户提交表单之前进行验证。您可以创建自定义异常,通知服务调用方用户名已在使用中

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

通过服务方法,例如:

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
    }

}

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

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

是的,我也想到了……但是,看看我刚才做的编辑……希望您能理解这一点(我想我没有理解它的框架)是的,我也这么想……但是,看看我刚刚做的编辑……希望你能理解(我没有理解它的框架,我想)谷歌的“SQL注入攻击”和“JDBC教程准备的语句”。您的代码不安全。我一直想知道这些SQL注入攻击是如何进行的,我会检查它们…谢谢。谷歌的“SQL注入攻击”和“JDBC教程准备的语句”。您的代码不安全。我一直想知道这些SQL注入攻击是如何进行的,我会检查它们…谢谢。但现在忘记ajax…将其视为GUI应用程序(我指的不是web应用程序)写在秋千或其他任何东西…你认为呢?如果是这样的话,我同意Pau Kiat Wee。在第一个地方,我想到了一个选择查询来检查用户名(用户在注册时已输入)已经在表中…但对我来说似乎是多余的,因为我认为,即使这样做也不会阻止DBMS检查唯一性冲突,对吧???,如果是,那么select查询将比异常方法耗费大量时间。如果不是,我想知道异常方法的问题。从技术上讲,这对我们来说没有错e异常方法。检查重复看起来是一种更干净的方法。它完全取决于您想要使用什么。但是现在忘记ajax吧……将其视为GUI应用程序(我指的不是web应用程序)写在秋千或其他任何东西…你认为呢?如果是这样的话,我同意Pau Kiat Wee。在第一个地方,我想到了一个选择查询来检查用户名(用户在注册时已输入)已经在表中…但对我来说似乎是多余的,因为我认为,即使这样做也不会阻止DBMS检查唯一性冲突,对吧???,如果是,那么select查询将比异常方法耗费大量时间。如果不是,我想知道异常方法的问题。从技术上讲,这对我们来说没有错e异常方法。检查重复似乎是一种更干净的方法。它完全取决于您想要使用什么。