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

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

ただいまの
回答率

91.35%

  • Java

    10454questions

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

  • MySQL

    4382questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

(急募)Javaのセッターゲッターの使い方がわかりません

解決済

回答 2

投稿 2017/11/29 01:52

  • 評価
  • クリップ 0
  • VIEW 215

n.t

score 16

課題でJavaのプログラミングがでて困っております。
アクセスクラスとコントロールクラスの二つではデータのselectなどうまくいったのですが今課題のgeter seterを利用しなきゃいけないところで生きず待ってしまっております。

下記に私が挫折したコードがあります。
Javaに詳しい方助けてください。よろしくお願いします。

//アクセスクラス
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DataBase {

    private Connection con = createConnection();

    private String Host = "jdbc:mysql://localhost:3306/shoseki";    
    private String User = "root";
    private String Pass = "";

    private Connection createConnection() {
    Connection con = null;
    try {
      Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(Host,User,Pass);
    }catch(ClassNotFoundException e) {
      e.printStackTrace();
    }catch(SQLException e) {
      e.printStackTrace();
    }
    return con;
    }

    private void close(Connection con){
        try {
            con.close();
        }catch(SQLException e) {
            e.printStackTrace();
        }
    }    

    public void Serch(String key, String value) {
      String sql = "Select * From shoseki";
        ResultSet rs = null;
        if(key != "null") {
            sql =    sql.concat(" where " + key + " LIKE " + "'%" + value + "%'");
        }
        rs = SqlExec(sql);
        SetResult(rs);        
    }

    private ResultSet SqlExec(String sql) {
        Statement stmt = null;
        ResultSet rs = null;
        try {
            stmt = con.createStatement();
          rs = stmt.executeQuery(sql);
        }catch(SQLException e) {
            e.printStackTrace();
        }
    return rs; 
    }    

    private void SetResult(ResultSet rs) {
        List List = new ArrayList();
        while(rs.next()) {
            Shoseki shoseki = new Shoseki();
            shoseki.setIsbn(rs.getString("isbn"));
            shoseki.setTitle(rs.getString("title"));
            shoseki.setAuthor(rs.getString("author"));
            List.add(shoseki);
        }
    }
}    
// コントロールクラス
import java.sql.*;
import java.util.ArrayList;
import java.util.List; 

class ShosekiManagementSystem {

    private Shoseki shoseki;
    public static void main(String[] args){

        String inputString;
        int n;

        ShosekiManagementSystem sms = new ShosekiManagementSystem();

        while(true) {
            // Menu Display
      System.out.println("********************");
      System.out.println("**書籍データベース**");
      System.out.println("****操作メニュー****");
      System.out.println("********************");
      System.out.println("1.登録");
      System.out.println("2.検索");
      System.out.println("3.更新");
      System.out.println("4.削除");
      System.out.println("9.終了");
      System.out.println("");
      System.out.println("> ");

            inputString = new java.util.Scanner(System.in).nextLine();
             n = Integer.parseInt(inputString);
            // End Determination
            if(n == 9 ) break;

            // Menu Number Check
            switch(n) {
                case 1:
                    sms.Insert();
                    break;
                case 2:
                    sms.Serch();
                    break;
                case 3:
                    sms.Update();
                    break;
                case 4:
                    sms.Delete();
                    break;
                default:
            }
        }
    }

    // Create
    private void Insert() {

  }

     // Update 
  private void Update() {

  }

    // Delete
    private void Delete() {

    }

    // Serch
    private void Serch() {
        DataBase DB = new DataBase();
        ResultSet rs;
        String inputString;
        int n;

        while(true) {
            // Menu Display
            System.out.println("1.全件検索");
            System.out.println("2.ISBNから検索");
            System.out.println("3.書籍名から検索");
            System.out.println("4.著者から検索");
            System.out.println("9.戻る");
            System.out.println("");
            System.out.println("> ");

            inputString = new java.util.Scanner(System.in).nextLine();
            n    = Integer.parseInt(inputString);

            //  End Determination
            if(n == 9) break;

            // Menu Number Check
            switch(n) {
                case 1:
                    DB.Serch("null","null");
                ShowList();
                    break;                    
                case 2:
                    System.out.println("");
                    System.out.println("ISBN番号による検索");
                    System.out.println("");    
                    System.out.println("ISBN番号 ↓ ");
                    inputString = new java.util.Scanner(System.in).nextLine();
                    DB.Serch("isbn",inputString);
                    ShowList();
                    break;
                case 3:
                    System.out.println("");
          System.out.println("タイトルによる検索");
          System.out.println(""); 
          System.out.println("タイトル ↓ ");
          inputString = new java.util.Scanner(System.in).nextLine();
          DB.Serch("title",inputString);
                    ShowList();
                    break;
                case 4:
                    System.out.println("");
          System.out.println("著者による検索");
          System.out.println(""); 
          System.out.println("著者 ↓ ");
          inputString = new java.util.Scanner(System.in).nextLine();
          DB.Serch("author",inputString);
                    ShowList();
                    break;
                default:
            }            
        }
    }

    private void ShowList(){
       Shoseki List; 
    for(inr i = 0; i < List.size(); i++) {
            List = (Shoseki) shoseki.get(i);
      System.out.println("ISBN   :\t" + List.getIsbn);
      System.out.println("タイトル :\t" + List.getTitle);
      System.out.println("著者   :\t" + List.getAuthor);
    }
  }
}
// ゲッター
public class Shoseki {

 private String isbn;
 private String title;
 private String author;

    public String getIsbn() {
   return this.isbn;
  }

     public void setIsbn(String isbn) {
   this.isbn   = isbn;
  }

    public String getTitle() {
   return this.title;
  }

  public void setTitle(String title) {
   this.title  = title;
  }

    public String getAuthor() {
   return this.author;
  }

  public void setAuthor(String author) {
   this.author = author;
  }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • num79kill

    2017/11/29 08:31

    SetResultにも問題あるし、コンパイルできないなか、教官に聞くといいと思うよ。課題でしよ

    キャンセル

  • num79kill

    2017/11/29 09:09

    ちなみに急募や初心者などと件名に書くと回答率が著しく低下します。

    キャンセル

  • YasuhiroMiyake

    2017/11/29 09:22

    ShowListメソッド内で書いていることを1行ずつコメントを書いてみてはいかがでしょうか。そうすれば自分で何を書いているのか分かると思います。(他の方もそうですが答えを書くのは簡単なのですが、それをすると課題の意味がないので・・・)

    キャンセル

回答 2

+2

コードをざっと見た感じ、以下のようなことがやりたいように見受けられます。

  1. 番号でやりたいことを分岐する
  2. やりたいことに合わせて必要な情報を入力する
  3. 情報をもとにDB.SearchでShosekiのListを作成する
  4. ShowListで先程のListを画面に表示する

コードを見る限り、ゲッターセッターの使い方はあっています。しかし、そもそも「変数の使い方」を間違えています。

// DataBase.java
    private void SetResult(ResultSet rs) {
        List List = new ArrayList(); // ←この変数はSetResultの中でしか存在しない
        while(rs.next()) {
            Shoseki shoseki = new Shoseki();
            shoseki.setIsbn(rs.getString("isbn"));
            shoseki.setTitle(rs.getString("title"));
            shoseki.setAuthor(rs.getString("author"));
            List.add(shoseki);
        }
    }

まずDataBase#SetResultですが、ここで作成されているListという変数は、SetResultの中でしか存在しません。ShosekiManagementSystemでこのListを使ってfor文を処理しようとしていますが、そのListという変数は直前にShosekiクラスで定義したただ名前が同じなだけの変数です。存在自体は全く別のものです。例えばA町に住んでいる田中さんと、B町に住んでいる田中さんは、同じ名前であっても別人ですよね。
というかそもそもShosekiのデータをListから受け取る変数の名前がListなのがごっちゃになる原因です。

この問題を解決するには、DataBase#SetResultの戻り値としてListを受け取り、ShosekiManagementSystem#ShowResultに引数としてそのListを渡して、それをfor文で処理するべきです。

これ以上書くと正解をそのまま教えてしまうので、あとはこの説明を解釈して自分で直してください。

投稿 2017/11/29 09:31

編集 2017/11/29 09:32

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+1

(急募)よりは【ゆる募】とかの方が逆に回答しやすいです。
Javaに詳しくはないですが、見てみました。

内容をざっと見ながらインデント等を揃えましたが、特筆すべき問題は特に見受けられませんでした。
細かなエラーはたくさんあるようでした。
とりあえず下記としてみました。
コンパイルは通るようでした。

// Main.java

import java.sql.*;
import java.util.*;

class DataBase {
   private String Host = "jdbc:mysql://localhost:3306/shoseki";    
   private String User = "root";
   private String Pass = "";
   private Connection con;

   public DataBase() throws ClassNotFoundException, SQLException {
      this.con = createConnection();
   }

   private Connection createConnection() throws ClassNotFoundException, SQLException {
      Connection con = null;
      try {
         Class.forName("com.mysql.jdbc.Driver");
         con = DriverManager.getConnection(Host,User,Pass);
      } catch(ClassNotFoundException e) {
         // e.printStackTrace();
         throw e;
      } catch(SQLException e) {
         // e.printStackTrace();
         throw e;
      }
      return con;
   }

   private void close() throws SQLException {
      try {
         if (this.con != null) {
            this.con.close();
         }
      } catch(SQLException e) {
         // e.printStackTrace();
         throw e;
      }
   }

   public ResultSet search(String key, String value) throws SQLException {
      String sql = "SELECT * FROM shoseki";
      if(key != "null") {
         sql = sql.concat(" WHERE " + key + " LIKE " + "'%" + value + "%'");
      }
      return sqlExec(sql);
   }

   private ResultSet sqlExec(String sql) throws SQLException {
      Statement stmt = null;
      ResultSet rs = null;
      try {
         stmt = con.createStatement();
         rs = stmt.executeQuery(sql);
      } catch(SQLException e) {
         // e.printStackTrace();
         throw e;
      }
      return rs;
   }

/*
   private List<Shoseki> getResult(ResultSet rs) throws SQLException {
      List<Shoseki> List = new ArrayList<>();
      while(rs.next()) {
         Shoseki shoseki = new Shoseki();
         shoseki.setIsbn(rs.getString("isbn"));
         shoseki.setTitle(rs.getString("title"));
         shoseki.setAuthor(rs.getString("author"));
         List.add(shoseki);
      }
   }
*/
}

class ShosekiManagementSystem {

   private DataBase database;

   public ShosekiManagementSystem() throws ClassNotFoundException, SQLException {
      this.database = new DataBase();
   }

   /** Create. */
   public void insert() {

   }

   /** Update. */
   public void update() {

   }

   /** Delete. */
   public void delete() {

   }

   /** Search. */
   public void search() throws SQLException, NumberFormatException, NoSuchElementException, IllegalStateException {
      ResultSet rs;
      String inputString;
      int n;

      while(true) {
         // Menu Display
         System.out.println("1.全件検索");
         System.out.println("2.ISBNから検索");
         System.out.println("3.書籍名から検索");
         System.out.println("4.著者から検索");
         System.out.println("9.戻る");
         System.out.println("");
         System.out.println("> ");

         inputString = new java.util.Scanner(System.in).nextLine();
         n = Integer.parseInt(inputString);

         //  End Determination
         if(n == 9) {
            break;
         }

         // Menu Number Check
         switch(n) {
            case 1:
               rs = this.database.search("null", "null");
               showList(rs);
               break;
            case 2:
               System.out.println("");
               System.out.println("ISBN番号による検索");
               System.out.println("");    
               System.out.println("ISBN番号 ↓ ");

               inputString = new java.util.Scanner(System.in).nextLine();
               rs = this.database.search("isbn", inputString);
               showList(rs);
               break;
            case 3:
               System.out.println("");
               System.out.println("タイトルによる検索");
               System.out.println(""); 
               System.out.println("タイトル ↓ ");

               inputString = new java.util.Scanner(System.in).nextLine();
               rs = this.database.search("title", inputString);
               showList(rs);
               break;
            case 4:
               System.out.println("");
               System.out.println("著者による検索");
               System.out.println(""); 
               System.out.println("著者 ↓ ");

               inputString = new java.util.Scanner(System.in).nextLine();
               rs = this.database.search("author", inputString);
               showList(rs);
               break;
            default:
               // Do nothing.
         }
      }
   }

   private void showList(ResultSet rs) throws SQLException {
      List<Shoseki> shosekiList = new ArrayList<>();
      while(rs.next()) {
         Shoseki shoseki = new Shoseki();
         shoseki.setIsbn(rs.getString("isbn"));
         shoseki.setTitle(rs.getString("title"));
         shoseki.setAuthor(rs.getString("author"));
         shosekiList.add(shoseki);
      }

      for(Shoseki shoseki : shosekiList) {
         System.out.println("ISBN   :\t" + shoseki.getIsbn());
         System.out.println("タイトル :\t" + shoseki.getTitle());
         System.out.println("著者   :\t" + shoseki.getAuthor());
      }
   }
}

/**
 * This is a book.
 */
class Shoseki {
   /** ISBN. */
   private String isbn;
   /** Book title. */
   private String title;
   /** Book author. */
   private String author;

   public String getIsbn() {
      return this.isbn;
   }

   public void setIsbn(String isbn) {
      this.isbn = isbn;
   }

   public String getTitle() {
      return this.title;
   }

   public void setTitle(String title) {
      this.title  = title;
   }

   public String getAuthor() {
      return this.author;
   }

   public void setAuthor(String author) {
      this.author = author;
   }

   @Override
   public String toString() {
      String str = String.format("%s\n%s\n%s\n",
         "ISBN   :\t" + this.isbn,
         "タイトル :\t" + this.title,
         "著者   :\t" + this.author
      );
      return str;
   }
}

public class Main {
   public static void main(String[] args) throws Exception {
      String inputString;
      int n;

      ShosekiManagementSystem sms = new ShosekiManagementSystem();

      while(true) {
         // Menu Display
         System.out.println("********************");
         System.out.println("**書籍データベース**");
         System.out.println("****操作メニュー****");
         System.out.println("********************");
         System.out.println("1.登録");
         System.out.println("2.検索");
         System.out.println("3.更新");
         System.out.println("4.削除");
         System.out.println("9.終了");
         System.out.println("");
         System.out.println("> ");

         inputString = new java.util.Scanner(System.in).nextLine();
         n = Integer.parseInt(inputString);

         // End Determination
         if(n == 9) {
            break;
         }

         // Menu Number Check
         switch(n) {
            case 1:
               sms.insert();
               break;
            case 2:
               sms.search();
               break;
            case 3:
               sms.update();
               break;
            case 4:
               sms.delete();
               break;
            default:
               // Do nothing.
         }
      }
   }
}

投稿 2017/11/29 09:47

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

ただいまの回答率

91.35%

関連した質問

同じタグがついた質問を見る

  • Java

    10454questions

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

  • MySQL

    4382questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。