码迷,mamicode.com
首页 > 数据库 > 详细

Java内部转发和数据库的问题

时间:2017-12-12 16:06:03      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:sel   min   resultset   nec   except   编写   select   null   路径   

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

先看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(String sql, Object... params) throws SQLException {
		Connection conn = ds.getConnection();
		try {
			return executeQuery(conn, sql, params);
		} catch (SQLException ex) {
			closeQuietly(conn);
			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方法。只有当你不能用forward方法时才运用sendRedirect方法。

forward不会改变当前浏览器地址栏中的路径

 

 

Java内部转发和数据库的问题

标签:sel   min   resultset   nec   except   编写   select   null   路径   

原文地址:http://www.cnblogs.com/a986771570/p/8028087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!