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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

JDBC

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

Java

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

Eclipse

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

Q&A

1回答

1219閲覧

DAOを利用したデータ更新の方法がわからないです。

nununu1234

総合スコア0

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

JDBC

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

Java

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

Eclipse

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

0グッド

0クリップ

投稿2023/03/28 14:11

イメージ説明

●実現したいこと
・DAOを利用して実行イメージの表示をさせたいです。
・山田花子さんの部署を営業部から総務部に変更させ、1件更新と表示させたいです。
・30~39歳の従業員のリストを表示させたいです。

●実行結果-------------------------------------
特定の従業員の部署を変更する。
0件更新されました。

特定の年齢層の従業員リスト。
30~39歳までの従業員:[]

↑エラー表示は出ないのですが、更新されないのと、30~39歳の従業員の名前が表示されないです。
また、実行結果の山田花子さんの部署が変えることができないです。

●試してみたこと
・PrepareStatementをStatementに変えて試してみましたが上手くいきませんでした。

●ソースコード
テーブル名:employee
クラス名:ConnectionManager
クラス名:EmployeeDAO
クラス名:BusinessLogic

package DAO;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionManager {
private final String URL = "jdbc:oracle:@デバイス名:1521/sampledb";
private final String User = "ユーザ名";
private final String PASSWORD = "パスワード";

public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(URL,User,PASSWORD));
}
}
//メソッド--------------------------------------------------------------------------------
package DAO;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.PrepareStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class EmployeeDAO {
public int updateSectionByCode(String name1) throws SQLException{
int count = 0; 
try
(Connection con = ConnectionManager.getConnection()){
PrepareStatement pstmt = con.prepareStatement("Update
employee set section = '総務部' where name = '山田花子'");
count = pstmt.executeUpdate();
}
}
return count;
}

public List<String> selectNameByAge(int age1,int age2)throws SQLException{
try
(Connection con = ConnectionManager.getConnection()){
PrepareStatement pstmt = con.prepareStatement("select name from
m_employee where age >= 30 and age <= 39");
ResultSet res = pstmt.executeQuery();
while(res.next()) {
nameList.add(res.getString("name"));
}
}
return nameList;
}
//メインクラス--------------------------------------------------------------------
package DAO;
import java.util.List;

public class BusinessLogic {
public static void main (String[] args){
String name1 = "山田花子";
try {
System.out.println("特定の従業員の部署を変更する。");
int count = dao.updateSectionByCode(name1);
System.out.println(count + "件更新されました。");
System.out.println("");
System.out.println("特定の年齢層の従業員リスト。");
System.out.print("30~39歳までの従業員:");
int age1 = 30
int age2 = 39;
List<String> nameList = dao.selectNameByAge(age1,age2);
System.out.print(nameList + " ");
}catch(Exception e){
System.out.println("異常事態発生");
e.printStackTrace();
}
}
}

長文で申し訳ございません。
よろしくお願いいたします。

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

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

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

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

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

jimbe

2023/03/28 16:33 編集

コードはファイル毎にコードのマークダウンを使用して下さい。 でないと、コード内の記号類がフォーマットに使用され表示から消えてしまって、元のコードと異なってしまう場合があります。 また、過去の質問を放置しないで下さい。
jimbe

2023/03/28 16:21

書かれている sql をデータベースのツール等で実行した場合は正しく実行されるでしょうか。
nununu1234

2023/03/28 23:58

大変申し訳ございません。 教えていただきありがとうございます。 マークダウンを使ってみたいと思います。 また、データベースツールでも正しく実行されていない状況です。
nununu1234

2023/03/29 00:07

質問修正のURLありがとうございます。 マークダウンを使い訂正します。
jimbe

2023/03/29 04:20

>データベースツールでも正しく実行されていない状況です 正しく実行される状況にしてください。
guest

回答1

0

更新の表示が0のままなのは、EmployeeDAOクラスのint count が0のままだからです。SQL文を実行した後、int count を+1してください。count += 1

部署が更新されていなのはmainメソッドでEmployeeDAOクラスをインスタンス化していないからです。EmployeeDAO dao = new EmployeeDAO();int count = dao.updateSectionByCode(name1);の前でインスタンス化してください。
また、引数にname1を渡していますが、name1はupdateSectionByCodeメソッドで使用されていないようなのでなくても大丈夫です。あったとしてもエラーになることはないですが。

System.out.println(count + "件更新されました。");でcountを表示していますが、ここがさっき言ったようにEmployeeDAOで+1していないために戻り値のintは0のままなので,int count = dao.updateSectionByCode(name1);のcountには0が入っています。

30~39歳の従業員が取得できないのは、EmployeeDAOクラスでArrayListをnewしていないからだと思います。selectNameByAgeメソッドでnameListにaddするのであればメソッドの中かクラスの中でList<String> nameList = new ArrayList<>();しておく必要があります。ただし、メソッドのループの中ではnewしないでください。
また,先ほどと同じようにList<String> nameList = dao.selectNameByAge(age1,age2);も引数が使われていないので引数はあってもなくてもいいです。このままでもエラーにはならないのでとりあえず変える必要はないかと思います。変える場合は実際のメソッドの引数も消さなければいけないので気を付けてください。

mainメソッドでnameListをSystem.out.println(nameList+"");で表示させていますが、Listをそのまま表示すると型が表示されるだけのような気がします。Listの中身を表示したいのであれば拡張forなどで取り出してください。for(String sukinamoji : nameList){ System.out.println(sukinamoji); }。指定して取り出したのであればnameList.get(0);などで取り出してください。

投稿2023/06/30 00:05

編集2023/07/04 22:32
guap

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問