• JavaWeb(内部转发和对数据库操作sql语句拼接问题)


    今天帮朋友做课题设计的时候遇到问题,

    先看DAO,在DAO里面没有对name加上单引号,导致数据库查询出错,由于java会自动拼接为字符串

      public AdminDTO selectAdminById(String  name){ 
            Connection conn = DbHelper.getConnection();
            String sql  = "select * from admin where username= "+name;
            AdminDTO admin = null;
            try {
                PreparedStatement pst = conn.prepareStatement(sql);
                ResultSet rst = pst.executeQuery();
                while (rst.next()) {
                    admin = new AdminDTO();
                    admin.setId(rst.getInt("id"));
                    admin.setUsername(rst.getString("username"));
                    admin.setUserpwd(rst.getString("userpwd"));
                }
                rst.close();
                pst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    

    而在数据库里需要有单引号,本来应该是这样的查询结果

    导致了

    抛出sql错误,解决方法就是

     String sql="select * from admin where username ='"+name+"'";

    使用该语句来添加单引号解决,但是这还不完美,我们应该定义一个更加完美的方法来执行数据库的查询,

    public static ResultSet executeQuery(Connection conn, String sql,
            Object... parameters) throws SQLException
    {
        PreparedStatement ps = null;
        try
        {
            ResultSet rs = null;
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < parameters.length; i++)
            {
                ps.setObject(i + 1, parameters[i]);
            }
            rs = ps.executeQuery();
            return rs;
        } catch (SQLException ex)
        {
            close(ps);
            throw ex;
        }
    }
    

    使用该方法来执行查询

    参数params为一个可变长度的参数,可以传入参数作为数据库的查询所需的字段

    JDBCUtils.executeQuery("select * from T_cities where Id=? and IsDeleted=0", id);
    

     

    另外一个问题就是重定向的问题了

     

    我们要将校验的servlet的请求重定向到servlet

    response.sendRedirect("/ShowServlet");

    当然有时候光重定向到主服务器还远远不够,我们需要把响应和请求 都转发到主服务器

    			   request.getRequestDispatcher("/ShowServlet").forward(request, response);
    

    还有另外一个方式,但是不推荐使用

    response.sendRedirect(request.getContextPath()+"/servlet/ServletB");

    forward方法是在Web container内部工作的。sendRedirect方法需要到客户端的一个往返。所以forward方法比sendRedirect要快。

    但是,运用forward方法有局限性,你只能重定向到同一个Web应用程序中的一个资源。

    而sendRedirect方法可以让你重定向到任何URL。

    结论:尽量采用forward方法来提交

     

     

  • 相关阅读:
    Web Service接口返回泛型的问题(System.InvalidCastException: 无法将类型为“System.Collections.Generic.List`1[System.String]”的对象强制转换为类型“System.String[]”)
    Asp.net简单代码设置GridView自适应列宽不变形
    iframe自适应高度
    ASP.NET用户控件操作ASPX页面
    C#里面Auotpostback回刷时候,textbox里面的password怎么保存
    CentOS 7在执行yum操作时 报错
    git 查看/修改用户名、密码
    树、二叉树、满二叉树、完全二叉树
    C#中常见的winform控件命名规范 转
    C#控件命名规范
  • 原文地址:https://www.cnblogs.com/a986771570/p/8028087.html
Copyright © 2020-2023  润新知