Java-如何检查数据库中的现有用户(注册界面)?

Java-如何检查数据库中的现有用户(注册界面)?,java,mysql,servlets,dao,Java,Mysql,Servlets,Dao,这就是我到目前为止所做的。它还已连接到以用户名作为主键的数据库 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try { Accounts

这就是我到目前为止所做的。它还已连接到以用户名作为主键的数据库

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    try {
        Accounts bean = new Accounts();
        bean.setUsername(request.getParameter("uname"));
        bean.setName(request.getParameter("fname"));
        bean.setEmail(request.getParameter("email"));
        bean.setPassword(request.getParameter("password"));
        AccountsDAO aO = new AccountsDAO();
        aO.addAccount(bean);
        response.sendRedirect("Stream.jsp");
    }
    finally{

    }
}
我想要的是,当我尝试使用数据库中任何现有用户的相同用户名/电子邮件注册一个帐户时,它将重定向到另一个帐户,并使用response.sendredirect(“file.jsp”);这将需要用户使用其他用户名/电子邮件再次注册。提前谢谢你

这是我的账户

public void addAccount(Accounts bean) {
    try {
        bConnector = new DBConnector();
        Connection c = bConnector.getConnection();
        String query = "insert into account (username, name, email, password) values (?,?,?,?)";
        PreparedStatement preparedstatement = c.prepareStatement(query);
        preparedstatement.setString(1, bean.getUsername());
        preparedstatement.setString(2, bean.getName());
        preparedstatement.setString(3, bean.getEmail());
        preparedstatement.setString(4, bean.getPassword());
        preparedstatement.executeUpdate();
    } catch (SQLException ex) {
        Logger.getLogger(AccountsDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
}

一旦您将
用户名
作为主用户名,它将不允许插入重复的用户名。所以试着这样做

try
{
//query to insert your username which you get from user
}
如果它是重复的,它将抛出一个异常作为
ora-
,因此使用catch块使用页面重定向来处理该异常

catch(Exception e)
{
system.out.print(e);
response.sendRedirect("file.jsp");
}
更新

声明一个
整数
变量以检查是否插入了该值。还要将方法的返回类型
addAccount(accountsbean)
更改为
int

public int addAccount(Accounts bean) {

    int count=0; 
    try {
        bConnector = new DBConnector();
        Connection c = bConnector.getConnection();
        String query = "insert into account (username, name, email, password) values (?,?,?,?)";
        PreparedStatement preparedstatement = c.prepareStatement(query);
        preparedstatement.setString(1, bean.getUsername());
        preparedstatement.setString(2, bean.getName());
        preparedstatement.setString(3, bean.getEmail());
        preparedstatement.setString(4, bean.getPassword());
        count=preparedstatement.executeUpdate();
    } catch (SQLException ex) {
        Logger.getLogger(AccountsDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
 return count;
}
在servlet中

int count=0;
try {
        Accounts bean = new Accounts();
        bean.setUsername(request.getParameter("uname"));
        bean.setName(request.getParameter("fname"));
        bean.setEmail(request.getParameter("email"));
        bean.setPassword(request.getParameter("password"));
        AccountsDAO aO = new AccountsDAO();
        count=aO.addAccount(bean);
        if(count>0){
        response.sendRedirect("Stream.jsp"); \\Success condition here
        }
        else{
         response.sendRedirect("file.jsp");   \\ failure condition here
       }
    }
    catch(Exception e)
{
system.out.print(e);
}

希望这有帮助

发布你的
AccountsDAO
课程以获得更具体的答案你试过了吗?如果它解决了您的问题,请接受答案,因为它将帮助其他人。我将在现有的servlet中添加catch语句?它表示e是一个未使用的变量。很抱歉,我还真的不了解这一点。根据您的回答,第9行的servlet中有一个错误,它声明“不兼容类型:void不能转换为int”我是否也必须更改DAOInterface中的某些内容?是的,当然您需要将interface中的返回类型更改为intpublic interface AccountsDAOInterface{public int addAccount(Accounts bean);}在我的界面中添加到哪里和什么?@user3514806无需我您的界面正常。现在有错误吗?