java - MyEclipse+tomcat实现注册功能遇到的问题
高洛峰
高洛峰 2017-04-17 11:11:06
[Java讨论组]

web.xml中的register部分如下:

  RegisterServlet
    servlet.RegisterServlet
   
  
     RegisterServlet
     /registerServlet
  

Register.java代码段如下

public class RegisterServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    request.setCharacterEncoding("gb2312");
    response.setContentType("gb2312");

    String username = request.getParameter("username");
    String pwd = request.getParameter("pwd");

    if(new DB().insertUser(username, pwd)){
        response.sendRedirect("login.jsp");
    }
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doGet(request, response);
}

运行之后,浏览器没啥反应,我估计是Register.java中的if判断语句出现了问题,于是我添加了如下代码:

        if(new DB().insertUser(username, pwd)){
        response.sendRedirect("login.jsp");
    }else{
        response.sendRedirect("success.jsp");
    }

果然返回了success.jsp界面。 其中register.jsp代码段如下:

    
register
name:
Password:

其中DB.java的数据库连接代码段如下:

    Connection con;
PreparedStatement pstmt;
public DB(){
    String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String url = "jdbc:sqlserver://localhost:1433; DatabaseName=JSP"; 
    String username = "load";
    String password = "hww";
    //加载驱动程序以连接数据库
    try {
        Class.forName(driverName); 
        con = DriverManager.getConnection(url, username, password);
    }
    //捕获加载驱动程序异常
    catch (ClassNotFoundException e){
        System.err.println("加载JDBC/ODBC驱动程序失败。");
        e.printStackTrace();
        System.exit(1);
    }
    //捕获连接数据库异常
    catch (SQLException e){
        System.err.println("无法连接数据库");
        e.printStackTrace();
        System.exit(1);
    }
}

判断是否添加注册用户的代码段如下:

    public boolean insertUser(String username,String pwd){
    try{
        pstmt = con.prepareStatement("insert into[userTable]values(?,?)");
        pstmt.setString(1, username);
        pstmt.setString(2, pwd);
        pstmt.executeUpdate();
        return true;
    }catch(Exception e){
        e.printStackTrace();
        return false;
    }
}

请问在哪里出错了,搞不明白。谢谢。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
迷茫

通过你的描述,可以发现时insertUser方法的问题,看你贴的方法返回false是抛出了异常,确切的说是SQLException,出现异常调用的可能点:

  1. con.prepareStatement("insert into[userTable]values(?,?)")
  2. pstmt.setString(index, value)
  3. pstmt.executeUpdate()

下面是这3点的异常在Javadoc中的描述:

@exception SQLException if a database access error occurs or this method is called on a closed connection

@exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access error occurs or this method is called on a closed PreparedStatement

@exception SQLException if a database access error occurs; this method is called on a closed PreparedStatement or the SQL

从你的代码来看,异常的原因应该是:

a database access error occurs

你在代码中捕获了异常,加了一个e.printStackTrace(),好吧,去控制台看日志就知道原因了。

PS: 不知你是否是刚接触这种常见的前端Web+后台DB的Java编程,碰到问题好好分析一下代码,然后根据打印出的日志,一般能很快找出原因,而且在这个过程能锻炼到自己。这种自己独立分析问题,解决问题的方法很重要,再不行,还有google,求助论坛,问答网站这种及时性相对较差的方式应该是最后的选择。而且,自己独立解决问题,哪怕再小而简单的问题,难道不是一件很爽的事情吗?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号