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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

1回答

1162閲覧

DB上のデータを動的に受け取り、画面表示する処理

jaxxaxa

総合スコア10

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2020/04/23 01:01

編集2020/04/23 04:27

背景・実現したいこと

Javaを使用して1週間分の業務内容・進捗予定・実績をまとめて、それに対してコメントを付けるといったシステム(週報のようなもの)を作っています。
DB上にある業務内容・進捗予定・実績のデータを動的にDaoクラスで受け取り、jsp側で表示していきたいのですが、できません。

デバッグを行い、処理内容を確認してみました。
・Daoクラスで取得したDB上のデータが取得できず、Implementsクラスでデータを全てList型変数に格納できない。(拡張for文が回せない)
→データが入っていないので当たり前かと思いますが。

SQL文を各種Webサイトで見ながら改変してもデータが受け取れないどころかbadsqlgrammarとコンソール内に表示してしまいます。

ここ数日間書籍やWebサイトなどみて検討をしてみたのですが解決には至らなかったのでお力添えいただければと思います。

(DaoにSQL文を記述する前にpgAdminⅢでSQL文が合っているか確認したところ、データを取得することができたので、恐らくですがDaoクラス内の配列の受け取り?に問題があるのではと推測しております。)

実行環境は
・Java8
・Eclipse neon 4.6
・Apache Tomcat 8.0
・SpringMVC
・postgresql
・pgAdminⅢです。

該当のソースコード

Java:Daoクラス

1public List<CommentReportDto> selectCommentList() throws ComponentException { 2 3 StringBuilder sql = new StringBuilder(); 4 sql.append(" select"); 5 sql.append(" user_no"); // ユーザーNo. 6 sql.append(" ,comment_date"); // コメント年月日 7 sql.append(" ,contents_text_array"); // 内容(配列) 8 sql.append(" ,plan_text_array"); // 予定(配列) 9 sql.append(" ,actual_text_array"); // 実績(配列) 10 sql.append(" ,comment1_text"); // コメント1 11 sql.append(" ,comment2_text"); // コメント2 12 sql.append(" ,comment3_text"); // コメント3 13 sql.append(" from"); 14 sql.append(" trn_comment_report"); 15 sql.append(" where"); 16 sql.append(" contents_text_array ='{?,?,?,?,?,?,?,?}'");//要素1~7まで 17 sql.append(" and"); 18 sql.append(" plan_text_array = '{?,?,?,?,?,?,?,?}'"); 19 sql.append(" and"); 20 sql.append(" actual_text_array = '{?,?,?,?,?,?,?,?}'"); 21 22 try { 23 RowMapper<CommentReportDto> rowMapper = new BeanPropertyRowMapper<>( 24 CommentReportDto.class); 25 return this.jdbcTemplate.query(sql.toString(), rowMapper); 26 27 } catch (Exception e) { 28 e.printStackTrace(); 29 throw new ComponentException("一覧取得失敗.", e); 30 } 31} 32

Java:Implements

1@Service 2public class CommentReportImplements implements CommentReportInterface { 3 4 5 private CommentReportDao commentReportDao; 6 7 @Autowired 8 public CommentReportImplements(CommentReportDao commentReportDao) { 9 this.commentReportDao = commentReportDao; 10 } 11 12 @Override 13 public List<CommentReportBean> getCommentReportList() throws ComponentException { 14 List<CommentReportDto> listDto = this.commentReportDao.selectCommentList(); 15 List<CommentReportBean> list = new ArrayList<>(); 16 17 for (CommentReportDto dto : listDto) { 18 CommentReportBean bean = new CommentReportBean(); 19 bean.setUserNo(dto.getUserNo()); 20 bean.setCommentDate(dto.getCommentDate()); 21 bean.setContentsTextArray(dto.getContentsTextArray()); 22 bean.setPlanTextArray(dto.getPlanTextArray()); 23 bean.setActualTextArray(dto.getActualTextArray()); 24 bean.setComment1Text(dto.getComment1Text()); 25 bean.setComment2Text(dto.getComment2Text()); 26 bean.setComment3Text(dto.getComment3Text()); 27 28 list.add(bean); 29 } 30 31 return list; 32 } 33}

Java:Controller

1@Controller 2@RequestMapping(value = "manager") 3public class CommentReportListController { 4 5 private final CommentReportInterface commentReportInterface; 6 7 @Autowired 8 public CommentReportListController(CommentReportInterface commentReportInterface) { 9 this.commentReportInterface = commentReportInterface; 10 } 11 12 @RequestMapping(value = "commentReportList", method = RequestMethod.GET) 13 public String init(HttpServletRequest request) throws ComponentException { 14 try { 15 List<CommentReportBean> list = this.commentReportInterface.getCommentReportList(); 16 17 request.setAttribute("commentReportBeanList", list); 18 19 return "/manager/commentReportListView"; 20 21 } catch (Exception e) { 22 e.printStackTrace(); 23 throw new ComponentException("例外発生.", e); 24 } 25 } 26}

jsp

1 2<body> 3 <jsp:include page="../navigation/navigationBar.jsp" /> 4 <div class="container-fluid"> 5 <h1>コメント一覧画面</h1> 6 <p> 7 <button type="button" 8 onclick="location.href='../manager/commentCompanyTraineeList'" 9 class="btn btn-warning">社員一覧へ戻る</button> 10 </p> 11 <p> 12 <div class="row"> 13 <div class="col-12"> 14 <h4 id="date-6" class="center"> 15 2019年8月第1週 16 <button type="button" 17 onclick="location.href='../manager/commentReportRegister'" 18 class="btn btn-info">コメント登録</button> 19 <button type="button" 20 onclick="location.href='../manager/commentReportEdit'" 21 class="btn btn-info">コメント編集</button> 22 </h4> 23 <table class="table table-bordered"> 24 <thead class="thead-job-color"> 25 <tr> 26 <th class="right">日付</th> 27 <th class="center">曜<br>日 28 </th> 29 <th>内容</th> 30 <th>予定</th> 31 <th>実績</th> 32 </tr> 33 </thead> 34 <tbody> 35 <c:forEach items="${requestScope.workBeanList}" var="workBean" varStatus=""> 36 <tr class="vacation"> 37 <td class="right">${workBean.localDate}</td> 38 <td class="center">${workBean.dayOfTheWeek}</td> 39 </tr> 40 </c:forEach> 41 <c:forEach items="${requestScope.commentReportEditList}" var="commentBean" varStatus=""> 42 <tr class="vacation"> 43 <td class="pre-line">${commentBean.contentsTextArray}</td> 44 <td class="pre-line">${commentBean.planTextArray}</td> 45 <td class="pre-line">${commentBean.actualTextArray}</td> 46 </tr> 47 </c:forEach> 48 </tbody> 49 </table> 50 <table class="table table-bordered"> 51 <thead class="thead-job-color"> 52 <tr> 53 <th>コメント</th> 54 </tr> 55 </thead> 56 <tbody> 57 <tr> 58 <td> 59 <p> 60 <label for="comment1Text" class="label-control">コメント1</label><br> 61 <textarea id="comment1Text" name="comment1Text" rows="6" cols="80" class="form-control" ></textarea> 62 </p> 63 </td> 64 </tr> 65 66 <tr> 67 <td> 68 <p> 69 <label for="comment2Text" class="label-control">コメント2</label><br> 70 <textarea id="comment2Text" name="comment2Text" rows="6" cols="80" class="form-control" ></textarea> 71 </p> 72 </td> 73 </tr> 74 75 <tr> 76 <td> 77 <p> 78 <label for="comment3Text" class="label-control">コメント3</label><br> 79 <textarea id="comment2Text" name="comment2Text" rows="6" cols="80" class="form-control" ></textarea> 80 </p> 81 </td> 82 </tr> 83 </tbody> 84 </table> 85 </div> 86 </div> 87 </div> 88</body> 89</html>

【テーブル定義】
・user_no:Integer型、notnull、プライマリーキー・外部キー
・comment_date:date型、notnull、プライマリーキー
・contents_text_array:Text[]型
・plan_text_array:Text[]型
・actual_text_array:Text[]型
・comment1_text:text型
・comment2_text:text型
・comment3_text:text型
・release_start_timestamp:Timestamp型、notnull

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

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

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

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

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

m.ts10806

2020/04/23 01:39

jspはどこでしょう。 SQLも文字列作っただけでパラメーターにバインドしている記述がどこにもないようです。 ただ、テーブル定義とサンプルデータが提示されないとなんとも言えないと思います。 環境も古いのも気になりますが。
hoshi-takanori

2020/04/23 04:00

PostgreSQL の配列型をお使いのようですが、contents_text_array = '{?,?,?,?,?,?,?,?}' の ? はプレースホルダーではなく、単なる文字列の一部になる (そして、数値の配列に変換しようとしてエラーになる) と思います。また、配列の要素数は必ずしも 8 個とは限らないでしょうし、全部の値を指定して検索したい訳でもないと思います。 具体的にどんなデータが格納されていますか? また、どんな条件でデータを取得したいのでしょうか?
jaxxaxa

2020/04/23 04:36

テーブル定義を編集して追加しました。 内容としては社員一覧画面が別にあり、社員にはそれぞれユーザーIDを所持しております。ユーザーIDとユーザーNoが合致していた場合、その社員の1週間分の研修内容・予定・実績を取得して、表にして表示するといった具合で処理を行いたいです。
hoshi-takanori

2020/04/23 04:46

テーブル定義だけでなく、具体的なデータのサンプルはありますか? というか、contents_text_array, plan_text_array, actual_text_array という配列にはどんな値が入るんですか? そして、どんな条件でデータを取得したいんですか?
guest

回答1

0

ベストアンサー

プリペアドステートメントのパラメータ(SQLの?の部分)を設定する引数が足りないように見えます。
?の部分を前回自己解決したように固定の文字列にしてみてはどうでしょうか。
か、APIにあるようにパラメータを設定すれば、badsqlgrammarはでなくなると思います。

投稿2020/04/23 02:48

momon-ga

総合スコア4820

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問