Java
1package controller; 2 3import java.io.IOException; 4import java.util.ArrayList; 5import java.util.HashMap; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13import javax.servlet.http.HttpSession; 14 15import dao.ProductDao; 16import dao.SalesDao; 17import model.CartBean; 18 19/** 20 * Servlet implementation class ConfirmationServlet 21 */ 22@WebServlet("/ConfirmationServlet") 23public class ConfirmationServlet extends HttpServlet { 24 25 protected void doPost(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 // TODO Auto-generated method stub 28 29 //購入確認機能制御用クラス 30 31 HttpSession session = request.getSession(false); 32 @SuppressWarnings("unchecked") 33 ArrayList<CartBean> product_select_list = (ArrayList<CartBean>) session.getAttribute("product_select_list"); 34 35 ProductDao pro_dao = new ProductDao(); 36 37 ArrayList<Integer> product_cd_list = new ArrayList<Integer>(); 38 39 for (CartBean i : product_select_list) { 40 41 product_cd_list.add(i.getPro_cd()); 42 } 43 44 HashMap<Integer, Integer> new_stock_no = pro_dao.get_new_stock_no(product_cd_list); 45 46 System.out.println("map在庫" + new_stock_no.get(product_cd_list.get(0))); 47 48 for (CartBean i : product_select_list) { 49 int newStockNo = (int) (new_stock_no.get(i.getPro_cd())); 50 i.setStock_no(newStockNo); 51 } 52 53 //購入後の在庫更新のためのArrayList 54 ArrayList<Integer> remainingStockNo = new ArrayList<Integer>(); 55 56 //salesテーブルに更新するため。合計金額を入れるArrayList。 57 ArrayList<Integer> salesPrice = new ArrayList<Integer>(); 58 59 //-------------------------------------------------------------------------------------------------------------- 60 for (CartBean i : product_select_list) { 61 62 System.out.println("ConfirmationServlet:各商品の在庫数。 " + i.getPro_name() + ": " + i.getStock_no()); 63 System.out.println("ConfirmationServlet:各商品の購買数。 " + i.getPro_name() + ": " + i.getProduct_buy_no()); 64 65 if (i.getStock_no() < i.getProduct_buy_no()) { 66 67 session.setAttribute("product_select_list", product_select_list); 68 69 System.out.println("ConfirmationServlet:在庫がない状態。エラー文表示"); 70 request.setAttribute("error", "お買い求め商品の残り在庫がありません。"); 71 RequestDispatcher rd = request.getRequestDispatcher("/jsp/Confirmation.jsp"); 72 rd.forward(request, response); 73 //returnはこれ以上、下の処理に進まないようにするための処理。メモ return文 戻り値なしで検索 74 //returnは処理を1ブロックではなく全て終了します。 75 return; 76 77 } else { 78 //----------------------------------------------------------------------------------------------------------------- 79 //⒉残り在庫計算(productテーブル) 80 System.out.println("ConfirmationServlet:在庫数に余裕がある"); 81 82 83 int remaining_stock_no = i.getStock_no() - i.getProduct_buy_no(); 84 System.out 85 .println("ConfirmationServlet:各商品の在庫数-購買数=残りの在庫数。 " + i.getPro_name() + ": " 86 + remaining_stock_no); 87 88 //データベースに一括で更新するために、remainingStockNoに追加していく。 89 remainingStockNo.add(remaining_stock_no); 90 91 //--------------------------------------------------------------------------------------------------------------- 92 //3.Salesテーブル更新 93 94 //④商品ごとの合計金額。 95 //商品ごとの合計金額(購入商品の値段 * 購入個数) 96 int sales_price = i.getPro_price() * i.getProduct_buy_no(); 97 System.out.println("ConfirmationServlet:商品ごとの合計金額:" + sales_price); 98 99 salesPrice.add(sales_price); 100 101 } //if分括弧 102 } //for文括弧 103 //------------------------------------------------------------------------------------------------------------------- 104--- 105 //2.購入後のproductテーブル更新 106 //④購入後の在庫更新(SalesDao.javaのメソッドを呼び、在庫数を更新する。) 107 pro_dao.remaining_stock_no_update(product_cd_list, remainingStockNo); 108--- 109 110 111 112 //3.Salesテーブル更新 113 int user_id = (int) session.getAttribute("user_id"); 114 System.out.println("ConfirmationServlet:ユーザIDの番号: " + user_id); 115 116 //SalesDao.javaのメソッドを使いためのインスタン生成。 117 SalesDao sal_db = new SalesDao(); 118 119 //⑤Sales(購入テーブル)に格納する。 120 //ユーザーID(user_id),商品コード( pro_cd),購入金額(product_sum_price)を入れる 121--- 122 sal_db.sales_db_insert(user_id, product_cd_list, salesPrice); 123--- 124 //------------------------------------------------------------------------------------------------------------------- 125 //product_select_listを消す←購入を続けるとき、履歴を消すため。 126 product_select_list = new ArrayList<CartBean>(); 127 session.setAttribute("product_select_list", product_select_list); 128 129 //Complete.jsp(購入画面)に行く。 130 RequestDispatcher rd = request.getRequestDispatcher("/jsp/Complete.jsp"); 131 rd.forward(request, response); 132 } 133} 134
Java
1//ConfirmationServletより、商品を判別するための商品コードと、残り在庫数を取ってくる。 2 public void remaining_stock_no_update(ArrayList<Integer> product_cd_list, ArrayList<Integer> remainingStockNo) { 3 4 String url = "jdbc:mysql://localhost/ecsite?allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&" 5 + "useJDBCCompliantTimezoneShift=true&" 6 + "useLegacyDatetimeCode=false&" 7 + "serverTimezone=UTC"; 8 String id = "root"; 9 String pass = "password"; 10 11 Connection con = null; 12 PreparedStatement pstmt = null; 13 14 try { 15 Class.forName("com.mysql.jdbc.Driver"); 16 con = DriverManager.getConnection(url, id, pass); 17 18--- 19 //SQL文-------------------------------------------------------------------------------------------- 20 for() { 21 pstmt = con.prepareStatement("update product set stock_no = ? where pro_cd = ?"); 22 //残り在庫 23 pstmt.setInt(1, remainingStockNo.get()); 24 //商品コード 25 pstmt.setInt(2, pro_cd_list.get()); 26 27 pstmt.executeUpdate(); 28 } 29--- 30 } catch (ClassNotFoundException ex) { 31 //例外の文をコンソールに出力。何行目にエラーが出てるかの説明。 32 ex.printStackTrace(); 33 } catch (SQLException ex) { 34 ex.printStackTrace(); 35 } finally { 36 try { 37 if (pstmt != null) { 38 //後片付け 39 pstmt.close(); 40 } 41 if (con != null) { 42 //後片付け 43 con.close(); 44 } 45 } catch (Exception ex) { 46 } 47 } 48 }
PoductDaoに引数としてArrayListを二つ持ってきたのですがそれをSQL文プリペアドステートメントに活用したいです。
しかし、二つのArrayListの中身を活用するにはネストしか思いつかず、ArrayListの二次元配列を使い、二つの配列をネストせずに回したいです。
二つの配列をネストせずに二つの配列を回す方法はありますでしょうか?
回答2件
あなたの回答
tips
プレビュー