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

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

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

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

Q&A

解決済

1回答

3373閲覧

BO、DAOのサンプルコードで使用されているメソッドの戻り値型について

退会済みユーザー

退会済みユーザー

総合スコア0

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

0グッド

0クリップ

投稿2019/05/20 08:12

前提・実現したいこと

java初心者です。

下記コードで、
import元のDAOではcreate()の戻り値型はbooleanになっているのですが、
使用されているBOのexecute()はなぜ戻り値がないのでしょうか?

ものすごく初歩的な所でつまずいてる様な気もしますが、
今は、思い当たりません。

ご教示お願いいたします。

その他、
記載方法に改善点がある場合は、ご指摘下さいませ。

該当のソースコード

MaindoPostで使用するBO

java

1 2package model; 3 4import dao.MutterDAO; 5 6public class PostMutterLogic { 7 public void execute(Mutter mutter) { // 引数を1つに変更 8 MutterDAO dao = new MutterDAO(); 9 dao.create(mutter); 10 } 11} 12```DB保存された投稿内容をリスト格納して返す **findAll()**13投稿内容を**DB****INSERT**する **create()** を持つ**DAO** 14コード 15```java 16package dao; 17 18import java.sql.Connection; 19import java.sql.DriverManager; 20import java.sql.PreparedStatement; 21import java.sql.ResultSet; 22import java.sql.SQLException; 23import java.util.ArrayList; 24import java.util.List; 25 26import model.Mutter; 27 28public class MutterDAO { 29 30 private final String DRIVER_NAME = "org.h2.Driver"; 31 private final String JDBC_URL = 32 "jdbc:h2:file:C:/data/docoTsubu"; 33 private final String DB_USER = "sa"; 34 private final String DB_PASS = ""; 35 36 public List<Mutter> findAll() { 37 Connection conn = null; 38 List<Mutter> mutterList = new ArrayList<Mutter>(); 39 try { 40 Class.forName(DRIVER_NAME); 41 conn = DriverManager.getConnection( 42 JDBC_URL, DB_USER, DB_PASS); 43 44 // SELECT文の準備 45 String sql = 46 "SELECT ID,NAME,TEXT FROM MUTTER ORDER BY ID DESC"; 47 PreparedStatement pStmt = conn.prepareStatement(sql); 48 49 // SELECTを実行 50 ResultSet rs = pStmt.executeQuery(); 51 52 // SELECT文の結果をArrayListに格納 53 while (rs.next()) { 54 int id = rs.getInt("ID"); 55 String userName = rs.getString("NAME"); 56 String text = rs.getString("TEXT"); 57 Mutter mutter = new Mutter(id, userName, text); 58 mutterList.add(mutter); 59 } 60 } catch (SQLException e) { 61 e.printStackTrace(); 62 return null; 63 } catch (ClassNotFoundException e) { 64 e.printStackTrace(); 65 return null; 66 } finally { 67 // データベース切断 68 if (conn != null) { 69 try { 70 conn.close(); 71 } catch (SQLException e) { 72 e.printStackTrace(); 73 return null; 74 } 75 } 76 } 77 return mutterList; 78 } 79 80 public boolean create(Mutter mutter) { 81 Connection conn = null; 82 try { 83 // データベースへ接続 84 conn = DriverManager.getConnection( 85 JDBC_URL, DB_USER, DB_PASS); 86 87 // INSERT文の準備(idは自動連番なので指定しなくてよい) 88 String sql = "INSERT INTO MUTTER(NAME, TEXT) VALUES(?, ?)"; 89 PreparedStatement pStmt = conn.prepareStatement(sql); 90 // INSERT文中の「?」に使用する値を設定しSQLを完成 91 pStmt.setString(1, mutter.getUserName()); 92 pStmt.setString(2, mutter.getText()); 93 94 // INSERT文を実行 95 int result = pStmt.executeUpdate(); 96 97 if (result != 1) { 98 return false; 99 } 100 } catch (SQLException e) { 101 e.printStackTrace(); 102 return false; 103 } finally { 104 105 // データベース切断 106 if (conn != null) { 107 try { 108 conn.close(); 109 } catch (SQLException e) { 110 e.printStackTrace(); 111 } 112 } 113 } 114 return true; 115 } 116} 117

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

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

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

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

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

m.ts10806

2019/05/20 08:16

ご自身で組まれたのではないのでしょうか。 出所を明記してください。
退会済みユーザー

退会済みユーザー

2019/05/20 08:20

mts 10806 様 失礼致しました、 インプレス スッキリわかるサーブレット&JSP入門 です。
m.ts10806

2019/05/20 08:22

質問本文に追記願います 書籍であれば版も
jimbe

2019/05/20 08:53

なぜ execute に戻り値が必要とお考えなのでしょうか.
guest

回答1

0

ベストアンサー

おそらく参考されている書籍のコードの問題ではあると思うんですが、

JDBCから実行したSQLのINSERT処理は、追加に成功したレコード数が返されます。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/PreparedStatement.html#executeUpdate--

明らかに1件のみ追加したのに0件が返される場合は、殆どの場合が一意制約違反か、SQLの誤りか、DB接続の例外でしょう。
そのため当該ソースでは、0件が返ってくるときに false を、例外のときも false を返しているので、特に true/false かを判断せず、結果も変わらないと扱って 戻りをvoidにしているのではないかと。

投稿2019/05/20 09:16

A-pZ

総合スコア12011

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

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

退会済みユーザー

退会済みユーザー

2019/05/21 21:08

A-pZ 様 コメントが遅くなり申し訳ありません! 丁寧にご回答いただき有難うございました。 DAO,BO,サーブレットとの繋がりがイメージ出来ておらず、 意味のわからない質問ですみませんでした。 お陰様で腑に落ちて理解する事が出来ました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問