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无需我您的界面正常。现在有错误吗?