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

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に必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

1回答

2050閲覧

Java データベース検索でのエラー

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に必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

0クリップ

投稿2021/06/18 15:20

含み検索を行い、検索条件に合うデータベースの社員情報を表示したいです。
ログインしようとするとエラーになってしまい、上手くいきません。イメージ説明
ResultSet rs = pstmt.executeQuery();のところ
fact=Login.doLogin(con, empno, password);のところ

まだ勉強を始めたばかりで原因が全く分からないので、困っています。
また、コードが長くなってしまったのですが、もっと簡潔に書ける方法はないでしょうか。
MainSystemに追加、変更、削除がありますが、今回は検索だけなので、ここは無視してもらって大丈夫です。
よろしくお願いいたします。

Java

1import java.sql.Connection; 2import java.sql.DriverManager; 3import java.sql.SQLException; 4import java.util.ArrayList; 5 6 7public class MainSystem{ 8 public static void main(String[] args) { 9 // TODO 自動生成されたメソッド・スタブ 10 11 String jdbcUrl="jdbc:mysql://localhost/eimsdb?serverTimezone=JST";//データベースに接続するためのURL 12 String user="eimsuser";//データベースに接続するためのユーザ名 13 String passwd="eimspass";//データベースに接続するためパスワード 14 15 16 try(Connection con = DriverManager.getConnection(jdbcUrl,user,passwd)){ 17 18 boolean fact=true; 19 while(fact) { 20 ArrayList<String> inf =LoginGamen.getLoginInfo(); 21 int empno = Integer.parseInt(inf.get(0)); 22 String password=inf.get(1); 23 24 fact=Login.doLogin(con, empno, password); //★at MainSystem.main(MainSystem.java:24) 25 } 26 27 fact=true; 28 String function; 29 if(Login.getDeptname().equals("人事部")){ 30 JinjiDAO jinji =new JinjiDAO(con); 31 while(fact) { 32 function = JinjiDAO.showFunctions(); 33 if(function.equals("検索")) { 34 ArrayList<Syain> syain =jinji.dokensaku(); 35 36 for(Syain s : syain) { 37 System.out.println(s); 38 } 39 40 }else if(function.equals("追加")) { 41 42 }else if(function.equals("削除")) { 43 44 }else if(function.equals("変更")) { 45 46 } 47 48 } 49 50 }else { 51 SyainDAO syain = new SyainDAO(con); 52 while(fact) { 53 function=SyainDAO.showFunctions(); 54 if(function.equals("検索")) { 55 ArrayList<Syain> sList =syain.dokensaku(); 56 57 for(Syain s : sList) { 58 System.out.println(s); 59 } 60 } 61 62 63 } 64 } 65 }catch(SQLException e) { 66 e.printStackTrace(); 67 } 68 69 } 70 71}

Java

1 2import java.sql.Connection; 3import java.sql.PreparedStatement; 4import java.sql.ResultSet; 5import java.sql.SQLException; 6 7public class Login { 8 private static String deptname; 9 10 public static boolean doLogin(Connection con, int empno, String password) { 11 String sql = "SELECT * FROM emproyee e JOIN department d on e.deptno = d.deptno WHERE empno = ? and password = ?"; 12 boolean fact = true; 13 try { 14 PreparedStatement pstmt = con.prepareStatement(sql); 15 pstmt.setInt(1,empno); 16 pstmt.setString(2,password); 17 ResultSet rs = pstmt.executeQuery(); //★at MainSystem.main(MainSystem.java:24) 18 19 //false = ログイン成功 20 if(rs.next()==true) { 21 System.out.println("ログインに成功しました"); 22 deptname=rs.getString("deptname"); 23 fact = false; 24 }else { 25 System.out.println("ログインに失敗しました。入力しなおしてください"); 26 fact = true; 27 } 28 }catch(SQLException e) { 29 e.printStackTrace(); 30 } 31 return fact; 32 } 33 public static String getDeptname() { 34 return deptname; 35} 36}

Java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.util.ArrayList; 5 6public class LoginGamen { 7 8 /* 9 * メソッド名:ログイン情報の取得 10 * 引数:なし 11 * 戻り値:入力されたログインに必要な社員情報(社員番号、パスワード) 12 */ 13 public static ArrayList<String> getLoginInfo() { 14 ArrayList <String> inf = new ArrayList<>(); 15 try { 16 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 17 System.out.println("社員番号を入力してください"); 18 System.out.printf("->社員番号:"); 19 inf.add(br.readLine()); 20 System.out.println("パスワードを入力してください"); 21 System.out.printf("->パスワード:"); 22 inf.add(br.readLine()); 23 24 }catch(IOException e) { 25 e.printStackTrace(); 26 } 27 return inf; 28 } 29} 30

Java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4import java.sql.Connection; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9 10public class SyainDAO { 11 private Connection con = null; 12 13 public static String showFunctions() { 14 String function=null; 15 try { 16 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 17 while(true) { 18 System.out.println("その他社員用機能一覧"); 19 System.out.println("->検索"); 20 System.out.println("どの処理を実行しますか?行う処理を入力してください。"); 21 System.out.printf("->行う処理:"); 22 function =br.readLine(); 23 if(function.equals("検索")) { 24 break; 25 }else { 26 System.out.println("正しい機能を入力してください"); 27 } 28 } 29 }catch(IOException e) { 30 e.printStackTrace(); 31 } 32 return function; 33 } 34 35 public SyainDAO(Connection con) { 36 this.con = con; 37 } 38 39 public ArrayList<Syain> dokensaku() { //メソッド名:社員情報の検索 40 ArrayList<Syain> syainList = new ArrayList<>(); 41 String sql = Kensaku.createSql(); 42 PreparedStatement pStmt = null; 43 44 try { 45 pStmt = con.prepareStatement(sql); 46 ResultSet rs =pStmt.executeQuery(); 47 while (rs.next()) { 48 int empno = rs.getInt("emp_no"); 49 String lname = rs.getString("l_name"); 50 String fname = rs.getString("f_name"); 51 String lkana = rs.getString("l_kana"); 52 String fkana = rs.getString("f_kana"); 53 String password = rs.getString("pass_word"); 54 int gender = rs.getInt("gen_der"); 55 int deptno = rs.getInt("dept_no"); 56 String deptname = rs.getString("dept_name"); 57 58 Busyo busyo = new Busyo(deptno, deptname); 59 syainList.add(new Syain(empno, lname, fname, lkana, fkana, password, gender, deptno, busyo)); 60 } 61 } catch (SQLException e) { 62 e.printStackTrace(); 63 } 64 65 if(syainList.size()==0) { 66 System.out.println("入力された社員は存在しません"); 67 } 68 69 return syainList; 70 } 71}

java

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

java

1//JinjiDAO 2SyainDAOの継承

java

1//Jinji 2Syainとほぼ同じ

Java

1//検索機能 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}

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

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

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

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

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

guest

回答1

0

ベストアンサー

そのメッセージには、eimsdbというデータベースのemproyeeテーブルが見つからない、と書いてあります。
MySQLにあるデータベース、テーブルの名前はそれで合っていますか?
(※"employee"の間違いではないでしょうか)

投稿2021/06/18 15:27

編集2021/06/18 15:30
hallen0225

総合スコア587

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

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

lemon1027

2021/06/18 15:49

ありがとうございます。スペルミスを直してログインはできました。 しかし、実際に検索機能をしたら新しいエラーが出てきてしまいました・・・。 java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERElname like '%%'and fname like '%%'and lkana like '%%'and fkana like '%%'and' at line 1 入力された社員は存在しません at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003) at SyainDAO.dokensaku(SyainDAO.java:47) at MainSystem.main(MainSystem.java:34) at SyainDAO.dokensaku(SyainDAO.java:47)→ResultSet rs =pStmt.executeQuery();のところ at MainSystem.main(MainSystem.java:34)→ArrayList<Syain> syain =jinji.dokensaku();のところ
hallen0225

2021/06/18 15:54

そのエラーメッセージの内容は分かりましたか? 「新しいエラーが出てきました」ではなく、その内容を調べて、そのうえで分からなかったら「このエラーはどういう意味ですか?」という質問をされた方がよいです。
lemon1027

2021/06/18 16:16

SQL文が違うと思っていろいろ試してみたのですが、上手く動きませんでした。
hallen0225

2021/06/18 16:21

「SQL文が違う」ことはあっています。 'WHERElname like '%%'and fname like '%%'and lkana like '%%'and fkana like '%%'and'の部分に間違いがあると書いてあるのですが、まず分かりやすいものが1つありますね。"WHERE"の後にスペースがありません。 あと、"lkana like '%%'"のようなものは、その検索項目に文字列が入力されているときに挿入したいのだと思うのですが、今は文字列が「入力されていない」ときに挿入されてしまっていますね。
lemon1027

2021/06/18 16:54

WHEREは自力で気づくことができたのですが、後者は全然気づかなくて勉強不足だと思いました・・・。 なんとかエラーが出ずに検索実行まで行けたのですが、今度は検索条件を入れても条件に当てはまらない社員まで表示されてしまいます。自分なりに考えてみたのですが、やはり、まだSQL文がおかしいのでしょうか。 現在のSQL文は↓のような感じです。 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"); //入力されていればwhere句で連結、されなければスキップ try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); boolean flag = false; System.out.print("氏"); System.out.println("->"); String lname = br.readLine(); if (lname.equals("")) { sql.append(" lname like \"%"+ lname +"%\""); flag = true; } System.out.print("名"); System.out.println("->"); String fname = br.readLine(); if (lname.equals("")) { if(flag == false){ sql.append(" fname like '%" + fname + "%'"); flag = true; }else { sql.append(" and fname like '%" + fname + "%'"); } }・・・
hallen0225

2021/06/18 17:25

先ほどお伝えした、 > "lkana like '%%'"のようなものは、その検索項目に文字列が入力されているときに挿入したいのだと思うのですが、今は文字列が「入力されていない」ときに挿入されてしまっていますね。 の部分が修正されていません。 "if (lname.equals("")) {...}"の中身は、lnameが「空白のとき」しか実行されないのでこういうことになります。
lemon1027

2021/06/18 17:41

申し訳ありません。色々付け加えたり戻したりしていたら、気付かない間に消えてしまっていたようです。 無事完成することが出来ました。 夜遅くまでありがとうございます。 今日1日中頑張ってもなかなかできなかったので、本当に嬉しいです! プログラミング自体慣れておらず、ミスに全然気づけなかったので、これからはもっと注意深くコードを見たいと思います。
hallen0225

2021/06/18 17:47

ともあれ、上手くいって良かったです。 ただ、「何故動くようになったか」は考えるようにしてくださいね。それがないと、同じような間違いをずっと繰り返してしまうので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問