前提
JSP&サーブレットで簡単なMVCモデルのアプリを作成しています。
メインの画面にデータベースに登録した内容を表示しようとしています。
MySQLはローカルの自分のPCで環境構築済みです。
Apache Tomcatをサーバーとして利用しています。
TomcatはフロントエンドのViewはアプリケーションルートにjspディレクトリを設け、サーブレットなどのロジックはsrcディレクトリに各フォルダを配置して動作させています。
実現したいこと
ページの読み込み時に、DAOクラスのメソッドを作動させて、MySQLのSELECT文を実行し、戻り値として結果セットを取得し、ページに表示したいです。
発生している問題・エラーメッセージ
エラーメッセージなどの出力は確認できておりません。
自身で確認できるところまで原因を探ったところ、SQLの集計関数を使用すると、結果セットの取得に失敗するようです。
通常のSELECT文をJavaコードで実行:○
SQLの集計関数をJavaコードで実行:✕
ターミナル上で集計関数SQLを実行:○
という結果になってしまっています。
該当のソースコード
以下がデータベースから結果セットを取得してくるメソッドです。
javaDAOクラス一部抜粋
1public List<Results> selectDateCalcResults() { 2 List<Results> resultList = new ArrayList<>(); 3 String sql = "SELECT kpiID, date, result FROM results ORDER BY kpiID"; 4 // String sql = "SELECT kpiID, date, SUM(result) FROM results GROUP BY kpiID, date ORDER BY kpiID"; 5 try { 6 this.connect(); 7 ps = db.prepareStatement(sql); 8 ResultSet rs = ps.executeQuery(); 9 while (rs.next()) { 10 Results results = new Results(); 11 results.setKpiID(rs.getInt("kpiID")); 12 results.setDate(rs.getString("date")); 13 results.setResult(rs.getInt("result")); 14 resultList.add(results); 15 } 16 } catch (NamingException | SQLException e) { 17 e.printStackTrace(); 18 } finally { 19 this.disconnect(); 20 } 21 return resultList; 22 }
こちらは出力側のJSPです。
Main.jsp
1<c:forEach var="rs" items="${resultList}" varStatus="s"> 2<div class="test"> 3 ${rs.getKpiID()} 4 ${rs.getDate()} 5 ${rs.getResult()} 6</div> 7</c:forEach>
変数「resultList」にはデータベースから取得した結果セットが格納され、動作も確認されています。
ターミナルでは普通に取得できました。
terminal
1mysql> SELECT kpiID, date, SUM(result) FROM results GROUP BY kpiID, date ORDER BY kpiID; 2+-------+------------+-------------+ 3| kpiID | date | SUM(result) | 4+-------+------------+-------------+ 5| 1 | 2022-12-25 | 2 | 6| 1 | 2022-12-26 | 4 | 7| 1 | 2022-12-28 | 1 | 8| 1 | 2023-01-01 | 1 | 9| 2 | 2023-01-06 | 1 | 10| 4 | 2023-01-01 | 1 | 11| 5 | 2023-01-01 | 1 | 12+-------+------------+-------------+ 137 rows in set (0.00 sec)
試したこと
上記のJavaコードのコメントアウトを外して実行すると、問題なく結果セットが取得できました。
また、SQLがおかしいのかと、ターミナル上でSQL文を実行すると問題なく、結果セットが取得できました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/02 12:08