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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

3918閲覧

JavaのServiceクラスでDAOクラスをインスタンス化できません。。。

music

総合スコア13

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

1グッド

1クリップ

投稿2021/09/18 08:39

編集2021/09/18 12:19

javaのServiceクラスでDAOクラスを呼びたいのですが、
うまくインスタンス化できません。。。
Serviceクラスの**dao.findByCondition();**でエラーが出ます。

エラー文 → 「型 ItemDAO のメソッド findByCondition(String, int) は引数 () に適用できません」

引数に型や引数名を入力してみても解決できませんでした。

わかる方がいらっしゃいましたらお力添えお願い致します。。

Java

1import java.sql.Connection; 2import java.sql.PreparedStatement; 3import java.sql.ResultSet; 4import java.sql.SQLException; 5import java.util.ArrayList; 6import java.util.List; 7 8import jp.nib.ict21.ecsite.data.Item; 9 10public class ItemDAO extends CommonDAO { 11 //商品検索処理を行うクラス 12 13 public List<Item> findByCondition(String keyword, int categoryId) throws SQLException{ 14 //エラーを説明する文字列(SQLException)をスルーする 15 16 List<Item> itemsList = new ArrayList<>(); 17 //インスタンス化 18 19 String sql = 20 "SELECT " 21 + "item_Id," 22 + "name," 23 + "manufacturer," 24 + "category_Id," 25 + "color," 26 + "price," 27 + "stock," 28 + "recommended " 29 + "FROM " 30 + "public.items " 31 + "WHERE " 32 + "name LIKE '%?%' " 33 + "AND category_Id = ?"; 34 35 /* 商品Id 36 * 商品名 37 * 製造会社 38 * カテゴリId 39 * 色 40 * 価格 41 * 在庫数 42 * オススメ 43 * public.itemsテーブルの 44 * カテゴリによる*/ 45 46 Connection con = connect(); 47 //CommonDAOから接続するメソッドを継承 48 49 try(PreparedStatement ps = con.prepareStatement(sql)){ 50 //SQLを実行するための準備 51 52 ps.setString(1, keyword); 53 ps.setInt(2, categoryId); 54 //プレースホルダーに値をセット 55 56 57 ResultSet rs = ps.executeQuery(); 58 //SQLを実行 59 60 61 while(rs.next() == true) { 62 //データベースを繰り返し処理で検索する 63 64 Item item = new Item(); 65 //Itemをインスタンス化 66 67 item.setItem_Id(rs.getInt("item_id")); 68 item.setName(rs.getString("name")); 69 item.setManufacturer(rs.getString("manufacturer")); 70 item.setCategory_Id(rs.getInt("category_Id")); 71 item.setColor(rs.getString("color")); 72 item.setStock(rs.getInt("stock")); 73 item.setRecommended(rs.getBoolean("recommended")); 74 //各リストのResultSetをgetterで取得して、itemのリストにsetterでセット 75 76 switch(rs.getInt("category_Id")) { 77 //カテゴリ別に結果を変える処理 78 79 case 1: 80 //帽子の時 81 itemsList.add(item); 82 break; 83 case 2: 84 //鞄の時 85 itemsList.add(item); 86 break; 87 default: 88 //全て(未選択)の時 89 itemsList.add(item); 90 /*各アイテムをリストにまとめて、 91 * addでAllayListに追加*/ 92 } 93 } 94 }catch(SQLException e) { 95 e.printStackTrace(); 96 /*tryで実行できなかった場合、 97 * エラー説明文をキャッチする*/ 98 } 99 100 return itemsList; 101 //try処理の結果をitemsListインスタンスに戻して格納 102 103 } 104}

Java

1import java.util.List; 2 3import javax.servlet.http.HttpServletRequest; 4 5import jp.nib.ict21.ecsite.dao.ItemDAO; 6import jp.nib.ict21.ecsite.data.Item; 7 8public class SearchService { 9 10 public static List<Item> findByCondition(HttpServletRequest request) throws SQLException{ 11 12 ItemDAO dao = new ItemDAO(); 13 List<Item> itemList = dao.findByCondition(); 14 15 return itemList; 16 17 } 18}
TN8001👍を押しています

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

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

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

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

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

guest

回答2

0

引数の考え方に誤解がありました。

下記のように修正することでエラー解除できました。

java

1public class SearchService { 2 3 public static List<Item> findByCondition(HttpServletRequest request) throws SQLException{ 4 5 String a = request.getParameter("keyword"); 6 String b = request.getParameter("category"); 7 /*request.getParameter("");で画面入力されたものを持ってくる。 8 * 引数はHTMLのnameに指定した値*/ 9 10 int c = Integer.parseInt(b); 11 //getしたcategoryIdはint型なので、Integerで型変換 12 //int型のcは = Int型のbですよ 13 14 ItemDAO dao = new ItemDAO(); 15 List<Item> itemList = dao.findByCondition(a, c); 16 //findByCondition(a, value);をItemDAOの引数に渡す 17 18 return itemList; 19 20 } 21}

投稿2021/09/19 09:57

music

総合スコア13

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

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

0

ベストアンサー

エラー内容提示されてないのでどんなエラー出てるか知りませんが

定義

java

1findByCondition(String keyword, int categoryId)

呼び出し

java

1List<Item> itemList = dao.findByCondition();

定義を正とするなら呼び出し側に引数がないですし、
呼び出し側を正とするなら定義に余計な引数があります。

「どういう機能を持ったメソッドなのか」確実にしてください。

投稿2021/09/18 08:49

編集2021/09/18 08:51
m.ts10806

総合スコア80875

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

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

music

2021/09/18 10:16

早急なご回答ありがとうございます。 説明が足りず申し訳ありませんでした。。 エラー文は 「型 ItemDAO のメソッド findByCondition(String, int) は引数 () に適用できません」 となっております。 商品検索画面で入力されたキーワードとカテゴリ指定を取得し、結果を返すのですが、 dao.findByCondition(); のdao.の後は findByCondition(String keyword, int categoryId) ; にすればよいのでしょうか。 javaを初めて1か月に満たず、基本的な事がわかっていないかもしれません。 お手数お掛け致しますが、よろしくお願いします。。。
m.ts10806

2021/09/18 11:05 編集

想定通りのエラー内容ですが、いずれにしても「メソッド」「引数」についてきちんとおさえてください。 (DAOやDTO、Beansに触れるのはまだ早いです) それなりの入門書であれば1か月しなくても触れられる、どちらかというと中盤より前の内容です。
music

2021/09/18 12:08

私の学習不足が原因なのは重々承知しております。 行き詰ってしまったのでこちらに質問させて頂いた次第です。 貴重なお時間取らせてしまい、申し訳ありませんでした。
m.ts10806

2021/09/18 18:43

こちらから首突っ込んでるので謝られるのは違う気がするのですけど。。。 そもそも何を参考に書きましたか? エラーの意味は理解できているのか、いないのかでもこちらのアドバイスの方向性も変わります。 「定義」と「参照」を理解できているか、いないのかでも違います。 何も理解できてないなら入門書をしっかりやったほうが良いです(これ理解できてないと何も組めないから。飛ばしていい場所ではない)
m.ts10806

2021/09/18 21:59

ちなみに現状では「どう書けば解決か」そのままの回答はできません。 keyword、categoryIdにあたるものがどこからどう送られてくるのか今提示されているコードにはないからです。 ひとまず、メソッドが求める引数と呼び出し側の引数をあわせてください(型の話)
music

2021/09/19 03:18

定義と参照は理解しているつもりですが、忘れているかもしれませんので復習致します。 ご意見ありがとうございました!
dodox86

2021/09/19 03:26

質問者 @musicさん m.ts10806さんが指摘されていることは、まず、 > 商品検索画面で入力されたキーワードとカテゴリ指定を取得し、 この、入力であるはずの「キーワード」と「カテゴリ」を取り出しているところが見当たらない、ということです。 たぶん、SearchServiceのfindByConditionメソッドがHttpServletRequest requestを引数としているので、そのリクエストに商品検索画面で入力されたフォームのパラメータが入っているのですよね? もし、その辺りがご自身で明らかでないなら、コードは完成しません。
music

2021/09/19 09:55 編集

m.ts10806様、dodox86様、 お二方ともご回答ありがとうございました。 ご意見を参考に復習したところ、引数の考え方に少し誤解があったようです。 public class SearchService { public static List<Item> findByCondition(HttpServletRequest request) throws SQLException{ String a = request.getParameter("keyword"); String b = request.getParameter("category"); /*request.getParameter("");で画面入力されたものを持ってくる。 * 引数はHTMLのnameに指定した値*/ int c = Integer.parseInt(b); //getしたcategoryIdはint型なので、Integerで型変換 //int型のcは = Int型のbですよ ItemDAO dao = new ItemDAO(); List<Item> itemList = dao.findByCondition(a, c); //findByCondition(a, c);をItemDAOの引数に渡す return itemList; } } このように修正したところ、エラーを解消できました。 1つ間違えると全体に影響してしまうので、改めて難しさと楽しさを実感できました。 この度はお二方とも、本当にありがとうございました。
m.ts10806

2021/09/19 10:47

細かいこと言うと、直ParseIntで良いです。1つメモリが無駄になりますし。 int b =Integer.parseInt( request.getParameter("category") ); また、getParameter()の値が絶対数値にできるとは限らないのでエラーハンドリングは必要です。
music

2021/09/19 11:40

なるほど!参考になります!! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問