2 u010793913 u010793913 于 2014.12.08 15:44 提问

关于servlet的跳转问题

if(action.equals("/log")){

        String name          = request.getParameter("name");
        String password      = request.getParameter("password");

        try {
            LoginDAO loginDao = (LoginDAO)LoginDAOFactory.getInstance("LoginDAO");
            Login e = new Login();
            e.setName(name);
            e.setPassword(password);
            int flag=loginDao.reg(e);
            if (flag==1)
            {   
                response.sendRedirect("index.jsp");
                }
            else
            {
                response.sendRedirect("logerror.jsp");
                }

        } catch (Exception e) {
            e.printStackTrace();
            throw new ServletException(e);
        }
    }



    public int reg(Login e)throws Exception{
    Connection conn = null;
    int flag=0;
    try {
        conn = DBUtil.getConnection();
        Statement stat = conn.createStatement();
        String sql = "select * from t_log where name=? and pw=?";
        PreparedStatement prep = conn.prepareStatement(sql);
        prep.setString(1,e.getName());
        prep.setString(2,e.getPassword());
        ResultSet rst = stat.executeQuery(sql);
        if(rst!=null){
            flag=1;             
           }
        else
        {
            flag=0;             
        }
       } catch (Exception e1) {
             e1.printStackTrace();
                throw e1;
       }finally{
           DBUtil.close(conn);
        }
    return flag;
}

代码在上,为什么不跳转……

3个回答

eagleyan
eagleyan   Rxr 2014.12.09 09:25
已采纳

问题很简单

conn.createStatement
应该是
conn.createPreparedStatement

u013067629
u013067629   2014.12.08 16:03

代码看了下 逻辑上是正确的 看是不是其他问题 比如web.xml 中配置是否正确

u010793913
u010793913 回复u013067629: Servlet.service() for servlet [ActionServlet] in context with path [/Employee-SV] threw exception [java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and pw=?' at line 1] with root cause java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and pw=?' at line 1
3 年多之前 回复
cjc211322
cjc211322 看看控制台有没有提示,工程目录结构是否正确
3 年多之前 回复
cjc211322
cjc211322 看看控制台有没有提示,工程目录结构是否正确
3 年多之前 回复
u013067629
u013067629 回复u010793913: 不要着急 仔细看看web.xml 文件是否配置正确 比如字符书写是否正确 有没有缺字母的 目前从你给的代码上看 逻辑上是正确的 控制台有什么提示吗
3 年多之前 回复
u010793913
u010793913 其他的地方都跳转,就这个不跳转……
3 年多之前 回复
u013067629
u013067629   2014.12.09 16:51

从控制台可以看出是SQL程序出现问题  stament  和 preparedment 的用法  你用混淆了

##  把Statement stat = conn.createStatement();  去掉 

stament接口是用于执行不含参数的静态SQL语句 preparedment使用来执行含有或不含有参数的预编译的SQL语句

 stament创建和执行SQL语句时有创建语句(Statetment statement = connection. createStatement())和执行语句(statement.executeUpdate("sql语句");)

preparement 不需要上面你写的Statement stat = conn.createStatement();语句 还有ResultSet rst = stat.executeQuery(sql);这句不对应该为ResultSet rst = prep.executeQuery();里面的sql去掉 因为前面已经执行了SQl语句: PreparedStatement prep = conn.prepareStatement(sql);

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!