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

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

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

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

Q&A

解決済

1回答

2201閲覧

getterとsetterの使い方

lianprivate

総合スコア23

Java

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

0グッド

0クリップ

投稿2018/12/18 09:11

今現在JavaとPostgreSQLのDB連携の勉強をしています。
DBへの登録や表示はできるようになった為、これをJavaで一連の動きとして行いたいと思っています。
Mainで名前や住所などを入力し、それをInsertクラスでDB挿入をしたいのです。
その際、Registクラスに登録に必要なパラメータを持たせたいと考えています。
その為、MainクラスでScannerを使い情報を入力、得た情報をsetterでRegistクラスに渡し、Insertクラスでパラメータをgetterで取得しDBへ登録としたいのですが、Insertクラスでgetterを使用してもパラメータを取得できません。
Registクラスでパラメータやgetterをstaticにするとパラメータは取得できるようになりましたが、できればカプセル化などの練習としてstaticを付けずにできればと考えています。

この場合、この3つのクラスの流れで進む場合staticで行うのが正しいのでしょうか。それとも何か足りてない部分があるのでしょうか?

関連しそうな部分のコードのみ記述しておきます。

public class DataExcersize { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Regist regist = new Regist(); System.out.println("名前を入力してください"); regist.setName(sc.next()); System.out.println("年齢を入力して下さい"); regist.setAge(sc.nextInt()); System.out.println("住所を入力してください"); regist.setAdress(sc.next()); System.out.println("性別を入力して下さい"); regist.setSex(sc.next()); Insert insert = new Insert(); insert.InsertDB(); } } public void InsertDB() { Connection conn = null; PreparedStatement stmt = null; ResultSet rset = null; Regist regist = new Regist(); //接続文字列 String url = "jdbc:postgresql://localhost:5432/sample"; String user = "postgres"; String password = "sample"; try{ Class.forName("org.postgresql.Driver"); //PostgreSQLへ接続 conn = DriverManager.getConnection(url, user, password); //自動コミットOFF conn.setAutoCommit(false); //INSERT文の実行 String sql = "INSERT INTO m_user VALUES (?,?,?,?,current_timestamp)"; stmt = conn.prepareStatement(sql); stmt.setString(1,regist.getName()); stmt.setLong(2,regist.getAge()); stmt.setString(3,regist.getAdress()); stmt.setString(4,regist.getSex()); stmt.executeUpdate(); conn.commit(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e){ e.printStackTrace(); } finally { try { if(rset != null)rset.close(); if(stmt != null)stmt.close(); if(conn != null)conn.close(); } catch (SQLException e){ e.printStackTrace(); } } } } public class Regist { private String name; private int age; private String adress; private String sex; Regist() {}; public String getName() { return name; } public void setName(String name) { this.name = name; }

以上、宜しくおねがいします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

InsertDB()new Regist()するのではなく、main関数でnewして色々データを突っ込んでいるregistInsertDB()に引数として渡すようにしましょう。

投稿2018/12/18 09:22

michael-ilcsy

総合スコア180

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

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

lianprivate

2018/12/19 00:43

回答ありがとうございます!無事にやりたい事ができるようになりました!引数に渡すのは目からウロコでした。まだまだ勉強しないとだめですね! 所で、引数に渡した時に public void InsertDB(Object obj) { Regist regist = (Regist) obj; こういった形でRegistをキャストする形で代入したのですが、このやり方はJava的に正しいのでしょうか?コンパイルも通るし、データの受け渡しもできたのですが、キャストはあまり美しくないとどこかで見たような気がしまして・・・。
michael-ilcsy

2018/12/19 01:05

Objectとして渡さなくても、(Regist regist)のように最初からRegistが来ると宣言しておけば、キャストも必要ないですしregistもそのまま使えます。キャストはもしキャスト出来ないものが来ても、コンパイルではじけず実行時エラーになってしまうので、静的型付けの恩恵(コンパイルではじいてくれる)を受けるためにも、出来るだけ型を指定したほうがいいです。
lianprivate

2018/12/19 01:14

大変非常に良くわかりました!ご指導の通り実施した所、全て問題なく動作致しました。 丁寧に回答頂きましてありがとうございました!助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問