今現在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; }
以上、宜しくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/19 00:43
2018/12/19 01:05
2018/12/19 01:14