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方法來提交

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM