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

标签 java mysql servlets dao

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

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.sendRedireect("file.jsp") ;这将要求用户使用另一个用户名/电子邮件再次注册。提前致谢!

这是我的 AccountsDAO

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);
    }
}

最佳答案

一旦您将 username 作为主要用户,它将不允许插入重复项。所以像这样尝试

try
{
//query to insert your username which you get from user
}

如果它是重复的,它会抛出一个异常作为 ora-,所以使用 catch block 使用页面重定向来处理异常。

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

更新

声明一个 integer 变量来检查您是否插入了值。同时将方法 addAccount(Accounts bean) 的返回类型更改为 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);
}

希望这对您有所帮助!

关于Java - 如何检查数据库中的现有用户(用于注册界面)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22960707/

相关文章:

java - 更改 JTable 中一个单元格的背景颜色

java - OOP:具有依赖注入(inject)的可重用类

java - 在 sql 查询中添加换行符 (\n) 是否安全?

mysql - 获取MySQL中同一日期的最短时间

java - 如何添加过滤功能?

java - 在 JavaScript 中使用 context-param 的最佳方式是什么

java - 如何解决 java.net.ConnectException :/ip_address:port - Connection refused exception in android

mysql - DBD::MySQL:LongReadLen 和 LongTruncOk

mysql - 恢复未保存的 MySQL Workbench 脚本?

java - 是否可以在 WebSphere Application Server 上自动运行 Java 应用程序?