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

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

新規登録して質問してみよう
ただいま回答率
85.37%
DAO(Data Access Object)

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

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2715閲覧

検索条件に合う社員情報を表示

lemon1027

総合スコア4

DAO(Data Access Object)

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

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

3クリップ

投稿2021/06/18 10:46

含み検索を行い、検索条件に合うデータベースの社員情報を表示したいです。
Mainを実行したところ、なぜか二回検索条件を聞かれるうえに、検索もうまくできません。
まだ勉強したばかりで、どこが間違えているのか、なにがわかっていないのかよくわかりません・・・。
とても困っています。よろしくお願いいたします。

java

1 2//SyainDAO 3//社員に関するクラス 4//検索条件に当てはます社員情報をリストとして戻す 5import java.sql.Connection; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9import java.util.ArrayList; 10 11public class SyainDAO { 12 private Connection con = null; 13 14 public SyainDAO(Connection con) { 15 this.con = con; 16 } 17 18 public ArrayList<Syain> dokensaku() { 19 ArrayList<Syain> syainList = new ArrayList<>(); 20 String sql = Kensaku.createSql(); //Kensakuで作成したSQL 21 PreparedStatement pStmt = null; 22 23 try { 24 pStmt = con.prepareStatement(sql); 25 ResultSet rs =pStmt.executeQuery(); 26 while (rs.next()) { 27 int empno = rs.getInt("emp_no"); 28 String lname = rs.getString("l_name"); 29 String fname = rs.getString("f_name"); 30 String lkana = rs.getString("l_kana"); 31 String fkana = rs.getString("f_kana"); 32 String password = rs.getString("pass_word"); 33 int gender = rs.getInt("gen_der"); 34 int deptno = rs.getInt("dept_no"); 35 String deptname = rs.getString("dept_name"); 36 37 Busyo busyo = new Busyo(deptno, deptname); 38 syainList.add(new Syain(empno, lname, fname, lkana, fkana, password, gender, deptno, busyo)); 39 } 40 } catch (SQLException e) { 41 e.printStackTrace(); 42 } 43 if(syainList.size()==0) { 44 System.out.println("入力された社員は存在しません"); 45 } 46 47 return syainList; 48 } 49}

java

1 //SyainTO 2public class Syain { 3 private int empno; 4 private String lname; 5 private String fname; 6 private String lkana; 7 private String fkana; 8 private String password; 9 private int gender; 10 private int deptno; 11 private Busyo busyo; 12 13 public Syain(int empno, String lname, String fname, String lkana, String fkana, String password, int gender, int deptno, Busyo busyo) { 14 this.empno = empno; 15 this.lname = lname; 16 this.fname = fname; 17 this.lkana = lkana; 18 this.fkana = fkana; 19 this.password = password; 20 this.gender = gender; 21 this.deptno = deptno; 22 this.busyo = busyo; 23 } 24 25 26 //empno 27 public int getEmpno() { 28 return empno; 29 } 30 31 //lname 32 public String getLname() { 33 return lname; 34 } 35 36 //fname 37 public String getFname() { 38 return fname; 39 } 40 41 //lkana 42 public String getLkana() { 43 return lkana; 44 } 45 46 //fkana 47 public String getFkana() { 48 return fkana; 49 } 50 51 //password 52 public String getPassword() { 53 return password; 54 } 55 56 //gender 57 public int getGender() { 58 return gender; 59 } 60 61 //deptno 62 public int getDeptno() { 63 return deptno; 64 } 65 66 //deptname 67 public String getDeptname() { 68 return busyo.getDeptname(); 69 } 70 71 public String toString() { 72 return getEmpno() + getLname() + " " + getFname() + "(" +getLkana() + " " + getFkana() + ")" + getDeptname(); 73 } 74}

java

1//Kensaku 2import java.io.BufferedReader; 3import java.io.IOException; 4import java.io.InputStreamReader; 5 6public class Kensaku { 7 8 public static String createSql() { 9 StringBuilder sql = new StringBuilder(); 10 sql.append("SELECT e.empno, e.lname, e.fname, e.lkana, e.fkana, e.password, e.gender, e.deptno, d.deptname FROM employee e JOIN department d ON e.deptno = d.deptno WHERE"); 11 12 //入力されていればwhere句で連結、されなければスキップ 13 try { 14 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 15 boolean flag = false; 16 17 System.out.print("氏"); 18 System.out.println("->"); 19 String lname = br.readLine(); 20 if (lname.equals("")) { 21 sql.append("lname like '%" + lname + "%'"); 22 flag = true; 23 } 24 25 System.out.print("名"); 26 System.out.println("->"); 27 String fname = br.readLine(); 28 if (lname.equals("")) { 29 if(!flag){ 30 sql.append("fname like '%" + fname + "%'"); 31 flag = true; 32 }else { 33 sql.append("and + fname like '%" + fname + "%'"); 34 } 35 } 36 37 System.out.print("氏(カナ)"); 38 System.out.println("->"); 39 String lkana = br.readLine(); 40 if (lkana.equals("")) { 41 if(!flag){ 42 sql.append("lkana like '%" + lkana + "%'"); 43 flag = true; 44 }else { 45 sql.append("and + lkana like '%" + lkana + "%'"); 46 } 47 } 48 49 System.out.print("名(カナ)"); 50 System.out.println("->"); 51 String fkana = br.readLine(); 52 if (fkana.equals("")) { 53 if(!flag){ 54 sql.append("fkana like '%" + fkana + "%'"); 55 flag = true; 56 }else { 57 sql.append("and + fkana like '%" + fkana + "%'"); 58 } 59 } 60 61 System.out.print("部署名"); 62 System.out.println("->"); 63 String deptname = br.readLine(); 64 if (deptname.equals("")) { 65 if(!flag){ 66 sql.append("deptname like '%" + deptname + "%'"); 67 flag = true; 68 }else { 69 sql.append("and + fdeptname like '%" + deptname + "%'"); 70 } 71 } 72 73 System.out.print("部署コード"); 74 System.out.println("->"); 75 String deptno = br.readLine(); 76 if (deptno.equals("")) { 77 if(!flag){ 78 sql.append("deptno like '%" + deptno + "%'"); 79 flag = true; 80 }else { 81 sql.append("and + deptno like '%" + deptno + "%'"); 82 } 83 } 84 }catch(IOException e) { 85 e.printStackTrace(); 86 } 87 return sql.toString(); 88 } 89}

java

1//Main 2import java.sql.Connection; 3import java.sql.DriverManager; 4import java.sql.SQLException; 5import java.util.ArrayList; 6 7 8public class MainSystem{ 9 public static void main(String[] args) { 10 //データベースに接続 11 String jdbcUrl = 12 "jdbc:mysql://localhost/eimsdb?serverTimezone=JST"; 13 String userId = "eimsuser"; 14 String pass = "eimspass"; 15 16 try(Connection con = DriverManager.getConnection(jdbcUrl, userId, pass)){ 17 18 SyainDAO syain = new SyainDAO(con); 19 Kensaku.createSql(); 20 ArrayList<Syain> sList = syain.dokensaku(); 21 22 for(Syain s :sList) { 23 System.out.println(s); 24 } 25 }catch (SQLException e) { 26 e.printStackTrace(); 27 } 28 } 29}

java

1//Busyo 2public class Busyo { 3 private int deptno; 4 private String deptname; 5 6 public Busyo(int deptno, String deptname) { 7 this.deptno = deptno; 8 this.deptname = deptname; 9 } 10 11 //deptno 12 public int getDeptno() { 13 return deptno; 14 } 15 16 //deptname 17 public String getDeptname() { 18 return deptname; 19 } 20 21}

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

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

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

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

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

guest

回答2

0

検索もうまくできません。

・全ての条件が無い時でもwhereが指定される。
and ++が文字列に含まれている。

※全てにandを付加しておいて、最後に先頭のandを除去するようにすると、2重に記述する必要は無くなります。

投稿2021/06/18 13:43

sazi

総合スコア25300

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

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

lemon1027

2021/06/18 14:41

たしかにそうですね・・・見落としていました。 回答していただきありがとうございます!
guest

0

ベストアンサー

検索条件を聞くのは Kensaku.createSql()メソッド

Main.javaで 以下の2行目で一回 これは何も受け取っていないから不要処理かな。
3行目のsyain.dokensaku()メソッド2行でも String sql = Kensaku.createSql(); を実行してるので2回聞かれるのだと思います

java

1 SyainDAO syain = new SyainDAO(con); 2 Kensaku.createSql(); 3 ArrayList<Syain> sList = syain.dokensaku();

検索がうまくできないことについては未確認

投稿2021/06/18 12:52

Crimson_Tide

総合スコア509

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問