1. 程式人生 > >第14章WEB14-JDBC案例篇

第14章WEB14-JDBC案例篇

javaweb JDBC案例篇

今日任務
? 使用JDBC技術完成對商品的添加修改查詢及分頁的操作
教學導航
教學目標
掌握JDBC的CRUD的操作
掌握JDBC的分頁操作
教學方法
案例驅動法
1.1 上次課內容回顧:
JSP的模式:

  • JSP的設計模式:
    • JSP的模式一:JSP + JavaBean設計模式:
    • JSP的模式二:JSP + Servlet + JavaBean設計模式:MVC設計模式.
      • M:Model
      • V:View
      • C:Controller
    • MVC和EE開發三層結構的關系:
    • 反射:(*****)
      • 獲得類的字節碼對象:Class對象.三種獲得的方式.
        • 類名.class;
        • 類的實例.getClass();
        • Class.forName();
      • 獲得構造器:Constructor
      • 獲得屬性:Field
      • 獲得方法:Method
        JDBC的事務管理:
    • 事務的概念:指的是邏輯上的一組操作,要麽一起成功,要麽一起失敗.
    • 事務的特性:
      • 原子性:事務的不可分割
      • 一致性:事務執行的前後,數據完整性保持一致.
      • 隔離性:一個事務的執行不應該受到另一個事務的幹擾
      • 持久性:事務一旦結束,將會永久修改到數據庫.
    • 如果不考慮隔離性:
      • 臟讀 :一個事務讀到另一個未提交的數據.
      • 不可重復讀 :一個事務讀到另一個事務已經提交的update的數據,導致多次的查詢結果不一致.
      • 虛讀 :一個事務讀到另一個事務已經提交的insert的數據,導致多次的查詢結果不一致.
    • 解決讀問題:
      • 未提交讀:以上情況都能發生.
      • 已提交讀:解決臟讀,但是不可重復讀和虛讀有可能發生
      • 重復讀:解決臟讀和不可重復讀,但是虛讀有可能發生.
      • 串行化:可以解決以上的所有情況.
    • JDBC進行事務的管理:
      • Connection:
        • setAutoCommit(boolean flag);
        • commit();
        • rollback();
    • DBUtils進行的事務的管理:
      1.2 完成對商品的CRUD的操作,進行條件查詢,分頁查詢.1.2.1 需求:
      購物的網站中需要顯示商品的信息,在商品信息的顯示中,如果商品的信息比較多.需要將比較多的商品進行分頁的顯示.進行條件查詢.同時對商品進行修改,插入,刪除.
      技術分享圖片
      1.2.2 分析:1.2.2.1 技術分析:
      使用MVC設計模式JSP + Servlet + JavaBean + JDBC實現商品信息的CRUD的操作.
      1.2.2.2 步驟分析:
      【步驟一】:創建數據庫和表
  • create database web_14;
  • use web_14;
  • create table product (
    pid varchar (96),
    pname varchar (150),
    market_price double ,
    shop_price double ,
    pimage varchar (600),
    pdate date ,
    is_hot double ,
    pdesc varchar (765),
    pflag double ,
    cid varchar (96)
    );
    【步驟二】:創建工程導入jar包.
  • msysql驅動
  • c3p0的包
  • dbutils的包
  • beanUtils的包:兩個.
  • JSTL的包:兩個
    【步驟三】:創建包結構.
    【步驟四】:創建一個首頁:
    <h1>歡迎來到商品信息管理平臺</h1>
    <h3><a href="${ pageContext.request.contextPath }/ProductFindAllServlet">查詢所有商品</a></h3>
    1.2.3 代碼實現:1.2.3.1 商品的查詢的功能:
    在首頁上點擊【查詢所有商品】鏈接:
    提交到Servlet中:
    • 調用業務層-->調用DAO:
    • 將商品列表保存到request域中:
    • 轉發到商品列表頁面:
      在商品列表的頁面中顯示商品:
      1.2.3.2 商品的添加的功能:
      在首頁點擊【添加】鏈接:跳轉到添加頁面.
      在添加頁面中輸入信息:點擊【提交】提交到Servlet
      在Servlet中:
    • 接收數據:
    • 封裝數據:
    • 調用業務層:
    • 頁面跳轉
  • 重復提交的問題:
    • 添加完商品之後,轉發到一個頁面,刷新該頁面.
    • 網速很慢,點擊提交的按鈕,其實已經在提交了但是網速慢,不停的點擊提交.
  • 解決重復提交的根本解決辦法:令牌機制(一次性).
    • 生成隨機的令牌保存在session中.
    • 在表單的提交的時候,將隨機的令牌放入到表單的隱藏字段中.
    • 在Servlet中獲得session中和表單中的令牌是否一致.
    • 如果一致執行插入操作,不一致跳轉到其他頁面.將令牌銷毀.
  • 代碼實現:
    // 判斷是否是重復提交:
    String token1 = (String)request.getSession().getAttribute("token");
    String token2 = request.getParameter("token");
    // 清空session中的令牌:
    request.getSession().removeAttribute("token");
    if(!token2.equals(token1)){
    request.setAttribute("msg", "親!您已經提交過!請不要重復提交了!");
    request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
    return;
    }
    1.2.3.3 商品的信息的修改:
    在列表頁面上點擊【修改】鏈接:
    提交到Servlet:根據id查詢該商品.將商品的信息顯示到修改頁面:
    在修改的頁面上修改數據,點擊【提交】按鈕:
    提交到Servlet:完成商品信息的修改:
    1.2.3.4 商品的信息的刪除:
    在列表頁面上點擊【刪除】鏈接:
    提交到Servlet:
    調用業務層完成刪除的操作:
    ***** 擴展刪除多條記錄:
    1.2.3.5 商品模糊查詢:
    1.2.3.6 商品分頁顯示:
    分頁條: 【首頁】【上一頁】[1][2][3][4]【下一頁】【尾頁】
    分頁功能的實現:
  • 物理分頁:一次只查10條記錄,點擊下一頁,再去查詢後10條.使用SQL語句進行控制的分頁.
    • 缺點:經常需要和數據庫交互.
    • 優點:數據量特別大,不會導致內存的溢出.
  • 邏輯分頁:一次性將所有數據全都查詢出來,根據需要進行截取.List集合進行控制. subList();
    • 缺點:數據量如果特別大,容易導致內存溢出.
    • 優點:與數據庫交互次數少.
  • 不同的數據庫對分頁的語句也是不一樣的:
    • MYSQL進行分頁: 使用limit關鍵字.
      • select * from xxx where .. Group by ... Having ... Order by ... limit a,b; -- a:從哪開始 b:查詢的記錄數.
      • 根據頁數計算 limit後面的兩個參數:
        • currPage begin pageSize
          1 0 10
          2 10 10
          3 20 10
        • begin = (currPage - 1) * pageSize;
    • 參數的傳遞:
      • 前臺--->後臺:currPage
      • 後臺--->前臺:currPage,totalPage(總頁數),totalCount(總記錄數),pageSize,List集合.
    • 使用JavaBean封裝參數:
      • 後臺--->前臺:傳遞一個JavaBean就可以.
    • Oracle進行分頁: 使用SQL語句嵌套.
    • SQL Server數據庫進行分頁: 使用 top 關鍵字.
  • 在首頁上添加一個分頁查詢的鏈接:

第14章WEB14-JDBC案例篇