<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【項目實踐】SMBMS(Javaweb版)(五)供應商管理模塊

      供應商管理

      前期準備

      1. 創建供應商 provider 的servlet
      2. 注冊 provider 的servlet
      3. 創建相關的Dao,Service,javaBean等
      4. 導入相關的jsp

      增加供應商

      addProvider

      PrivodeDao

      1. PrivodeDao
          int addProvider(Provider provider);
      
      1. PrivodeDaoImpl
          /**
           * 向數據庫中添加供應商信息
           *
           * @param connection 數據庫連接對象,用于執行SQL語句
           * @param provider   供應商對象,包含要添加的供應商的信息
           * @return 返回添加的行數,用于確認是否成功添加供應商
           * @throws Exception 如果在添加過程中發生錯誤,則拋出異常
           */
          @Override
          public int addProvider(Connection connection, Provider provider) throws Exception {
              // 初始化添加行數為0
              int addRows = 0;
              // 預編譯的SQL語句對象
              PreparedStatement preparedStatement;
      
              // 檢查數據庫連接是否為空
              if (connection != null) {
                  // 準備插入供應商信息的SQL語句
                  String sql = "insert into smbms_provider (" +
                          "proCode, " +
                          "proName, " +
                          "proDesc, " +
                          "proContact, " +
                          "proPhone, " +
                          "proAddress, " +
                          "proFax, " +
                          "createBy, " +
                          "createDate) " +
                          " values(?,?,?,?,?,?,?,?,?)";
                  // 初始化參數數組,用于存放SQL語句中的參數值
                  Object[] params = new Object[9];
                  // 設置SQL語句中的參數值
                  params[0] = provider.getProCode();
                  params[1] = provider.getProName();
                  params[2] = provider.getProDesc();
                  params[3] = provider.getProContact();
                  params[4] = provider.getProPhone();
                  params[5] = provider.getProAddress();
                  params[6] = provider.getProFax();
                  params[7] = provider.getCreateBy();
                  params[8] = provider.getCreateDate();
      
                  // 準備SQL語句執行對象
                  preparedStatement = connection.prepareStatement(sql);
      
                  // 執行插入操作,并返回添加的行數
                  addRows = BaseDao.executeUpdate(connection, sql, preparedStatement, params);
              }
      
              // 返回添加的行數
              return addRows;
          }
      

      ProviderService

      1. ProviderService
      boolean addProvider(Provider provider) throws SQLException, Exception;
      
      1. ProviderServiceImpl
          /**
           * 添加一個新的供應商到系統中。
           * <p>
           * 此方法用于將提供的供應商對象添加到數據庫中。它涉及數據庫操作和事務管理,
           * 根據操作的成功或失敗提交或回滾事務。
           *
           * @param provider 要添加的供應商對象,包含供應商的相關信息。
           * @return 返回一個布爾值,指示添加操作是否成功。true 表示成功,false 表示失敗。
           * @throws SQLException 如果發生數據庫訪問錯誤,該方法將拋出一個 SQLException。
           */
          @Override
          public boolean addProvider(Provider provider) throws SQLException {
              // 初始化數據庫連接對象和方法返回值
              Connection conn = null;
              boolean flag = false;
      
              try {
                  // 獲取數據庫連接并準備事務
                  conn = BaseDao.connection();
                  conn.setAutoCommit(false);
      
                  // 調用數據訪問對象方法添加供應商,并嘗試提交事務
                  int addRows = providerDao.addProvider(conn, provider);
                  conn.commit();
      
                  // 根據受影響的行數判斷添加是否成功
                  if (addRows > 0) {
                      flag = true;
                  }
      
              } catch (SQLException e) {
                  // 遇到 SQLException 時回滾事務
                  conn.rollback();
              } catch (Exception e) {
                  // 對于其他異常,轉換為 RuntimeException 并重新拋出
                  throw new RuntimeException(e);
              } finally {
                  // 在 finally 塊中關閉數據庫資源以確保執行
                  BaseDao.closeResource(conn, null, null);
              }
      
              // 返回添加供應商的結果
              return flag;
          }
      

      ProviderServlet

         /**
           * 處理HTTP Post請求的方法
           * 根據請求參數中的method字段值,決定執行相應的操作
           *
           * @param req  HttpServletRequest對象,用于獲取請求參數
           * @param resp HttpServletResponse對象,用于向客戶端發送數據
           * @throws ServletException 如果Servlet操作失敗
           * @throws IOException      如果發生輸入輸出異常
           */
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              // 獲取請求參數中的method值,如果為空則默認為空字符串
              String method = req.getParameter("method") == null ? "" : req.getParameter("method");
              
              // 根據method值調用對應的方法執行操作
              switch (method) {
                  case "add":
                      addProvider(req, resp);
                      break;
              }
          }
      
      
      
          /**
           * 添加供應商信息
           * <p>
           * 此方法從HTTP請求中提取供應商信息,并將其添加到數據庫中
           * 如果添加成功,將用戶重定向到供應商查詢頁面;如果添加失敗,則重定向回添加供應商頁面,并顯示錯誤信息
           *
           * @param req  HTTP請求對象,用于獲取請求參數和會話信息
           * @param resp HTTP響應對象,用于重定向用戶
           * @throws ServletException 如果Servlet操作失敗
           * @throws IOException      如果輸入/輸出操作失敗
           */
          private void addProvider(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      
              // 獲取當前登錄用戶信息
              User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
      
              // 創建一個新的供應商對象,并從請求中設置其屬性
              Provider provider = new Provider();
              provider.setProCode(req.getParameter("proCode"));
              provider.setProName(req.getParameter("proName"));
              provider.setProDesc(req.getParameter("proDesc"));
              provider.setProContact(req.getParameter("proContact"));
              provider.setProPhone(req.getParameter("proPhone"));
              provider.setProAddress(req.getParameter("proAddress"));
              provider.setProFax(req.getParameter("proFax"));
              // 設置創建者和修改者為當前用戶
              provider.setCreateBy(user.getId());
              provider.setModifyBy(user.getId());
              // 設置創建和修改日期為當前日期
              provider.setCreateDate(new Date());
              provider.setModifyDate(new Date());
      
              // 嘗試將供應商信息添加到數據庫中
              try {
                  if (providerService.addProvider(provider)) {
                      // 如果添加成功,設置成功消息并重定向到供應商查詢頁面
                      req.getSession().setAttribute("message", "添加成功!");
                      resp.sendRedirect(req.getContextPath() + "/provider?method=query");
                  } else {
                      // 如果添加失敗,設置錯誤消息并重定向回添加供應商頁面
                      req.getSession().setAttribute("message", "添加失敗!");
                      resp.sendRedirect(req.getContextPath() + "/jsp/provideradd.jsp");
                  }
              } catch (Exception e) {
                  // 如果發生異常,拋出運行時異常
                  throw new RuntimeException(e);
              }
      
              // 無論上述操作結果如何,最終將用戶重定向回添加供應商頁面
      //        req.getRequestDispatcher("/jsp/provideradd.jsp").forward(req, resp);
          }
      
      

      刪除供應商

      deleteProvider

      ProviderDao

      1. ProviderDao
      int deleteProvider(Connection connection, int id) throws SQLException;
      
      1. ProviderDaoImpl
      
          /**
           * 根據給定的ID刪除供應商信息
           *
           * @param connection 數據庫連接對象,用于執行SQL語句
           * @param id         需要刪除的供應商的ID
           * @return 返回刪除的行數,表示刪除成功的記錄數
           * @throws SQLException 如果執行SQL語句時發生錯誤
           */
          @Override
          public int deleteProvider(Connection connection, int id) throws SQLException {
      
              int deleteRows = 0;
              PreparedStatement preparedStatement;
      
              if (connection != null) {
                  // 定義刪除供應商的SQL語句
                  String sql = "delete from smbms_provider where id=?";
                  // 準備SQL語句
                  preparedStatement = connection.prepareStatement(sql);
                  // 設置SQL語句中的參數
                  preparedStatement.setInt(1, id);
                  // 執行更新操作
                  deleteRows = preparedStatement.executeUpdate();
                  // 關閉資源
                  BaseDao.closeResource(connection, preparedStatement, null);
              }
      
              // 返回刪除的行數
              return deleteRows;
          }
      

      ProviderService

      1. ProviderService
      void deleteProvider(int id);
      
      1. ProviderServiceImpl
      /**
       * 根據供應商ID刪除供應商信息
       * 
       * @param id 供應商的ID,用于標識要刪除的供應商
       * @return 返回刪除的行數,用于確認是否成功刪除供應商信息
       */
      @Override
      public int deleteProvider(int id) {
          // 初始化刪除行數為0
          int deleteRows = 0;
          // 聲明數據庫連接對象
          Connection conn = null;
          try {
              // 獲取數據庫連接
              conn = BaseDao.connection();
              // 調用供應商數據訪問對象的刪除方法,執行刪除操作
              deleteRows = providerDao.deleteProvider(conn, id);
          } catch (SQLException e) {
              // 如果捕獲到SQL異常,拋出運行時異常
              throw new RuntimeException(e);
          } finally {
              // 關閉數據庫資源,確保數據庫連接被釋放
              BaseDao.closeResource(conn, null, null);
          }
          // 返回刪除的行數
          return deleteRows;
      }
      

      ProviderServlet

         /**
           * 處理HTTP Post請求的方法
           * 根據請求參數中的method字段值,決定執行相應的操作
           *
           * @param req  HttpServletRequest對象,用于獲取請求參數
           * @param resp HttpServletResponse對象,用于向客戶端發送數據
           * @throws ServletException 如果Servlet操作失敗
           * @throws IOException      如果發生輸入輸出異常
           */
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              // 獲取請求參數中的method值,如果為空則默認為空字符串
              String method = req.getParameter("method") == null ? "" : req.getParameter("method");
              
              // 根據method值調用對應的方法執行操作
              switch (method) {
                  case "add":
                      addProvider(req, resp);
                      break;
                  case "deleteProvider":
                      deleteProvider(req, resp);
                      break;
              }
          }
      

      更改供應商信息

      modifyProvider

      ProviderDao

      1. ProviderDao
      int updateProvider(Connection connection, Provider provider) throws SQLException;
      
      1. ProviderDaoImpl
          /**
           * 更新供應商信息
           *
           * @param connection 數據庫連接對象,用于執行SQL語句
           * @param provider   待更新的供應商對象,包含新的供應商信息
           * @return 返回更新影響的行數,用于判斷更新操作是否成功
           * @throws SQLException 如果執行SQL語句時發生錯誤
           */
          @Override
          public int updateProvider(Connection connection, Provider provider) throws SQLException {
              int upRows = 0;
              PreparedStatement preparedStatement;
      
              // 檢查數據庫連接是否非空,確??梢园踩貓绦蠸QL語句
              if (connection != null) {
                  // 準備更新供應商信息的SQL語句
                  String sql = "update smbms_provider set " +
                          "proCode=?, " +
                          "proName=?, " +
                          "proDesc=?, " +
                          "proContact=?, " +
                          "proPhone=?, " +
                          "proAddress=?, " +
                          "proFax=?, " +
                          "modifyBy=?, " +
                          "modifyDate=? " +
                          "where id=?";
                  // 初始化參數數組,用于存儲供應商信息
                  Object[] params = new Object[9];
                  params[0] = provider.getProCode();
                  params[1] = provider.getProName();
                  params[2] = provider.getProDesc();
                  params[3] = provider.getProContact();
                  params[4] = provider.getProPhone();
                  params[5] = provider.getProAddress();
                  params[6] = provider.getProFax();
                  params[7] = provider.getModifyBy();
                  params[8] = provider.getModifyDate();
                  // 準備SQL語句執行對象
                  preparedStatement = connection.prepareStatement(sql);
                  // 執行更新操作并獲取影響的行數
                  upRows = BaseDao.executeUpdate(connection, sql, preparedStatement, params);
                  // 關閉資源,避免內存泄漏
                  BaseDao.closeResource(connection, preparedStatement, null);
              }
      
              // 返回更新影響的行數
              return upRows;
          }
      

      ProviderService

      1. ProviderService
      int updateProvider(Provider provider) throws SQLException;
      
      1. ProviderServiceImpl
          /**
           * 更新供應商信息
           * <p>
           * 此方法用于更新數據庫中供應商的信息它接收一個Provider對象作為參數,
           * 該對象包含了需要更新的供應商的新信息方法通過調用providerDao的updateProvider
           * 方法來執行數據庫更新操作如果更新過程中遇到異常,會進行回滾操作以確保數據一致性
           *
           * @param provider 包含了需要更新的供應商信息的Provider對象
           * @return 返回更新影響的行數,用于判斷更新操作是否成功
           * @throws SQLException 如果數據庫操作失敗,拋出此異常
           */
          @Override
          public int updateProvider(Provider provider) throws SQLException {
              int upRows = 0;
              Connection conn = null;
              try {
                  // 獲取數據庫連接
                  conn = BaseDao.connection();
                  // 執行更新操作
                  upRows = providerDao.updateProvider(conn, provider);
              } catch (SQLException e) {
                  // 更新失敗時,進行事務回滾
                  conn.rollback();
              } finally {
                  // 關閉數據庫資源
                  BaseDao.closeResource(conn, null, null);
              }
      
              return upRows;
          }
      

      ProviderServlet

         /**
           * 處理HTTP Post請求的方法
           * 根據請求參數中的method字段值,決定執行相應的操作
           *
           * @param req  HttpServletRequest對象,用于獲取請求參數
           * @param resp HttpServletResponse對象,用于向客戶端發送數據
           * @throws ServletException 如果Servlet操作失敗
           * @throws IOException      如果發生輸入輸出異常
           */
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              // 獲取請求參數中的method值,如果為空則默認為空字符串
              String method = req.getParameter("method") == null ? "" : req.getParameter("method");
              
              // 根據method值調用對應的方法執行操作
              switch (method) {
                  case "modify":
                      modifyProvider(req, resp);
                      break;
              }
          }
      
          /**
           * 更新一條記錄
           *
           * @param req  用于獲取請求信息和會話對象
           * @param resp 用于向客戶端發送響應
           */
          private void modifyProvider(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              // 獲取當前登錄用戶信息
              User user = (User) req.getSession().getAttribute(Constants.USER_SESSION);
      
              // 創建Provider對象,并從請求中獲取參數來設置對象屬性
              Provider provider = new Provider();
              provider.setId(Integer.parseInt(req.getParameter("id")));
              provider.setProName(req.getParameter("proName"));
              provider.setProCode(req.getParameter("proCode"));
              provider.setProDesc(req.getParameter("proDesc"));
              provider.setProContact(req.getParameter("proContact"));
              provider.setProPhone(req.getParameter("proPhone"));
              provider.setProAddress(req.getParameter("proAddress"));
              provider.setProFax(req.getParameter("proFax"));
              // 設置修改者為當前登錄用戶
              provider.setModifyBy(user.getId());
              // 設置修改時間為當前時間
              provider.setModifyDate(new Date());
      
              try {
                  // 嘗試更新數據庫中的Provider記錄
                  if (providerService.updateProvider(provider) > 0) {
                      // 如果更新成功,設置會話消息
                      req.getSession().setAttribute("message", "數據更新成功!");
                  } else {
                      // 如果更新失敗,設置會話消息
                      req.getSession().setAttribute("message", "數據更新失敗!");
                  }
              } catch (SQLException e) {
                  // 如果捕獲到SQLException,則拋出運行時異常
                  throw new RuntimeException(e);
              }
      
              // 跳轉到列表頁面
              req.getRequestDispatcher("/provider?method=view").forward(req, resp);
          }
      
      
      

      查詢供應商信息

      需要兩個方法

      1. getProviderCounts、
      2. getProviderList

      ProviderDao

      1. ProviderDao
         public List<Provider> getProviderList(Connection connection, String proName, String proCode) throws Exception;
      
      
      1. ProviderDaoImpl
          /**
           * 根據供應商名稱和編碼獲取供應商列表
           *
           * @param connection 數據庫連接對象,用于執行數據庫操作
           * @param proName    供應商名稱,用于篩選供應商列表
           * @param proCode    供應商編碼,用于篩選供應商列表
           * @return 返回一個包含符合條件的供應商對象的列表
           * @throws Exception 如果數據庫操作失敗,拋出異常
           */
          @Override
          public List<Provider> getProviderList(Connection connection, String proName, String proCode) throws Exception {
      
              List<Provider> providers = new ArrayList<Provider>();
              Provider provider = new Provider();
              PreparedStatement preparedStatement;
              ResultSet resultSet = null;
              String sql = "select * from smbms_provider ";
              // 初始化參數列表,用于存儲查詢條件參數
              List<Object> list = new ArrayList<Object>();
      
              if (connection != null) {
                  // 構建SQL查詢語句
                  sql += "where 1=1";
                  // 如果供應商名稱不為空,添加供應商名稱模糊查詢條件
                  if (!proName.isEmpty()) {
                      sql += "and proName like ? ";
                      list.add("%" + proName + "%");
                  }
                  // 如果供應商編碼不為空,添加供應商編碼模糊查詢條件
                  if (!proCode.isEmpty()) {
                      sql += "and proCode = ? ";
                      list.add( proCode );
                  }
      
                  // 準備SQL語句執行對象
                  preparedStatement = connection.prepareStatement(sql);
      
                  // 執行查詢并獲取結果集
                  resultSet = BaseDao.executeQuery(connection, sql, preparedStatement, list.toArray(),
                          resultSet);
      
                  // 遍歷結果集,將每條記錄轉換為供應商對象,并添加到列表中
                  while (resultSet.next()) {
                      providers.add(getProviderByResult(resultSet));
                  }
      
                  // 關閉數據庫資源
                  BaseDao.closeResource(connection, preparedStatement, resultSet);
              }
      
              // 返回供應商列表
              return providers;
          }
      

      ProviderService

      1. ProviderService
          List<Provider> getProviderList(String proName, String proCode);
      
      1. ProviderServiceImpl
          /**
           * 根據供應商名稱和編碼獲取供應商列表
           *
           * @param proName 供應商名稱,用于模糊查詢
           * @param proCode 供應商編碼,用于精確查詢
           * @return 返回一個包含查詢結果的供應商列表如果查詢結果為空,則返回一個空列表
           */
          @Override
          public List<Provider> getProviderList(String proName, String proCode) {
      
              // 初始化供應商列表
              List<Provider> providers = new ArrayList<>();
              // 獲取數據庫連接
              Connection conn = BaseDao.connection();
      
              try {
                  // 調用Dao層方法,根據供應商名稱和編碼查詢供應商列表
                  providers = providerDao.getProviderList(conn, proName, proCode);
              } catch (Exception e) {
                  // 異常處理:打印異常信息
                  e.printStackTrace();
              } finally {
                  // 關閉數據庫連接
                  BaseDao.closeConnection(conn);
              }
      
              // 返回查詢到的供應商列表
              return providers;
          }
      

      ProviderServlet

         /**
           * 處理HTTP Post請求的方法
           * 根據請求參數中的method字段值,決定執行相應的操作
           *
           * @param req  HttpServletRequest對象,用于獲取請求參數
           * @param resp HttpServletResponse對象,用于向客戶端發送數據
           * @throws ServletException 如果Servlet操作失敗
           * @throws IOException      如果發生輸入輸出異常
           */
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              // 獲取請求參數中的method值,如果為空則默認為空字符串
              String method = req.getParameter("method") == null ? "" : req.getParameter("method");
              
              // 根據method值調用對應的方法執行操作
              switch (method) {
                  case "modify":
                      modifyProvider(req, resp);
                      break;
              }
          }
      
          /**
           * 獲取多條記錄
           *
           * @param req  用于從HTTP請求中獲取參數和設置屬性
           * @param resp 用于發送HTTP響應
           */
          private void getProviderList(HttpServletRequest req, HttpServletResponse resp) {
              // 從請求中獲取查詢參數
              String queryProCode = req.getParameter("queryProCode");
              String queryProName = req.getParameter("queryProName");
              // 對查詢參數進行空值檢查并賦予默認值
              queryProCode = queryProCode == null ? "" : queryProCode;
              queryProName = queryProName == null ? "" : queryProName;
      
              // 調用服務層方法獲取供應商列表
              List<Provider> providerList = providerService.getProviderList(queryProCode, queryProName);
      
              try {
                  if (providerList != null) {
                      // 如果列表不為空,設置請求屬性并轉發到供應商列表頁面
                      req.setAttribute("providerList", providerList);
                      req.getRequestDispatcher("/providerlist.jsp");
                  } else {
                      // 如果列表為空,重定向到供應商查詢頁面
                      resp.sendRedirect(req.getContextPath() + "/provider?method=query");
                  }
              } catch (Exception e) {
                  // 異常處理: 打印異常信息
                  e.printStackTrace();
              }
          }
      
      
      posted @ 2025-06-11 19:32  柯基大大  閱讀(4)  評論(0)    收藏  舉報  來源
      主站蜘蛛池模板: 免费99视频| 人妻中文字幕亚洲精品| 性欧美大战久久久久久久| av激情亚洲男人的天堂| 亚洲熟妇自偷自拍另亚洲| 亚洲aⅴ天堂av天堂无码麻豆| 松滋市| 在线成人国产天堂精品av| 亚洲夜色噜噜av在线观看| 日韩精品中文字一区二区| 午夜在线欧美蜜桃| 久久国产乱子精品免费女| 亚洲性av网站| 亚洲一区二区三区在线| 一区二区三区午夜无码视频 | 成人网站免费观看永久视频下载| 久久精品一区二区三区综合| 亚洲区综合区小说区激情区| 国内精品自线在拍| 亚洲欧美v国产蜜芽tv| 亚洲国产一区二区三区四| 日韩精品人妻av一区二区三区| 久久羞羞色院精品全部免费| 国产精品一区二区久久不卡| 无套内射视频囯产| 日韩精品在线观看一二区| 在线综合亚洲欧洲综合网站| 婷婷久久综合九色综合88| 在线无码中文字幕一区| 元码人妻精品一区二区三区9| 欧美白妞大战非洲大炮| 亚洲精品中文av在线| 精品国产一区二区三区性色| 亚洲 a v无 码免 费 成 人 a v| 国产成人综合久久精品下载| 行唐县| 日韩一区二区三区水蜜桃| 久久天天躁狠狠躁夜夜躁2020| 精品国产一区av天美传媒| 国产日韩综合av在线| 日韩剧情片电影网站|