質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Q&A

0回答

1951閲覧

JSP 簡易注文システム 合計金額の算出

yanyan_tsukebo

総合スコア4

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

0グッド

0クリップ

投稿2021/05/24 02:14

編集2021/05/24 07:59

前提・実現したいこと

JSPとJavaBeansを利用して簡易注文システムを作成しています。
大枠の部分は出来上がったのでここに合計金額を算出するコードを書き加えたいのですが、
どのように書けばいいのか分かりません。どなたかご教示いただけますと幸いです。

条件、仕組みは以下のようなものです。

・サーブレットは使用せず、JSPとJavaBeansで構築する。
・商品は「1皿」ずつ注文する。処理としては、そのidの商品の注文数を「+1」する。
● 1ページ目
①「画像、商品名、値段、注文数」等を含んだ商品一覧をデータベースから表示する。
②表示された商品のリンクをクリックし、2ページ目で、その商品のidを受け取る。

● 2ページ目
③「1ページ目から受取ったid」を実引数としてメソッドupdateDB()に渡す。
④メソッドupdateDB()の丸括弧内に仮引数(tempid)を宣言し、idを受け取る。
⑤メソッドupdateDB()で、SQLのupdate文を実行し、注文数を「+1」する。
⑥2ページ目の最後に、<jsp:forward page="1ページ目のファイル名.jsp"/>を書き、1ページ目に戻る。

● 戻って来た1ページ目
⑦最新の注文の支払い合計金額を表示する。

該当のソースコード

【driveBean.jsp】 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); %> <%@ page import="java.util.*" %> <%@ page import="bean.*" %> <jsp:useBean id="obj" class="bean.BeanAccessDB" /> <!DOCTYPE html> <html><head><title>DBを読む</title></head> <body> <% List<BeanAccessDB> list = obj.DBtoList(); int sum = 0; for(int i = 0; i < list.size(); i++){ obj = list.get(i); %> <a href="driveBean2.jsp?linkdata=<%= obj.getId() %>"> <%= obj.getId() %> </a> <%= obj.getName() %>、 <%= obj.getPrice() %> <img src="images/寿司の画像/<%= obj.getPhoto() %>" width="70" height="70" /> <% out.print("合計:" + sum + "円"); %> <%}%> </body> </html>
【driveBean2.jsp】 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); %> <jsp:useBean id="obj" class="bean.BeanAccessDB" /> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title> </head> <body> <% String linkdata = request.getParameter("linkdata"); obj.updateDB(linkdata); %> </body>
【BeanAccessDB.java】 package bean; import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.mariadb.jdbc.Driver; public class BeanAccessDB { private String id; private String name; private int price; private String photo; private int number; public BeanAccessDB() { } public BeanAccessDB(String id, String name, int price, String photo, int number) { this.id = id; this.name = name; this.price = price; this.photo = photo; this.number = number; } public String getId() { return id; } public String getName() { return name; } public int getPrice() { return price; } public String getPhoto() { return photo; } public int getNumber() { return number; } public List<BeanAccessDB> DBtoList() { List<BeanAccessDB> list = new ArrayList<BeanAccessDB>(); Connection con = null; PreparedStatement ps = null; try { Driver.class.getDeclaredConstructor().newInstance(); con = DriverManager.getConnection("jdbc:mariadb://localhost/studyDB", "root", ""); String sql = "select * from sushi; "; ps = con.prepareStatement(sql.toString()); ResultSet rs = ps.executeQuery(); while (rs.next()) { String id = rs.getString("id"); System.out.println(id); String name = rs.getString("name"); int price = rs.getInt("price"); String photo = rs.getString("photo"); int number = rs.getInt("number"); list.add(new BeanAccessDB(id, name, price, photo, number)); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (ps != null) { ps.close(); } if (con != null) { con.close(); } } catch (Exception e) { e.printStackTrace(); } } return list; } public void updateDB(String tempid) { Connection con = null; PreparedStatement ps = null; try { Driver.class.getDeclaredConstructor().newInstance(); con = DriverManager.getConnection("jdbc:mariadb://localhost/studyDB", "root", ""); String sql = "update sushi set number = number + 1 where id = ? "; ps = con.prepareStatement(sql.toString()); ps.setString(1, tempid); ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (ps != null) { ps.close(); } if (con != null) { con.close(); } } catch (Exception e) { e.printStackTrace(); } } } }
【SQL TABLE sushi】 select * from sushi; +-----+------------+-------+--------------+--------+ | id | name | price | photo | number | +-----+------------+-------+--------------+--------+ | 001 | えび | 240 | ebi.png | 0 | | 002 | いか | 210 | ika.png | 0 | | 003 | いくら | 300 | ikura.png | 0 | | 004 | まぐろ | 150 | maguro.png | 0 | | 005 | しめさば | 200 | simesaba.png | 0 | | 006 | たまご | 140 | tamago.png | 0 | | 007 | うに | 400 | uni.png | 0 | | 008 | 太巻き | 500 | futomaki.png | 0 | | 009 | 手巻き寿司 | 550 | temaki.png | 0 | | 010 | ちらし寿司 | 1200 | tirasi.png | 0 | +-----+------------+-------+--------------+--------+

試したこと

自分で書ける範囲のコードは書きましたがここまでで限界でした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/05/24 02:17

基本テンプレートが2つ入っていて質問文の無駄な要素になっているので可読性を挙げるためにも 2回目の前提・実現したいこと以下は編集で消して頂ければと。
yanyan_tsukebo

2021/05/24 02:21

ご指摘ありがとうございます。 書式を改善させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問