現在JavaとDBの連携を学習しております。そこで3つのテーブルを操作し、挿入、更新、検索、削除等を行える段階まで来ましたが、オブジェクト指向の考え方に沿うべくクラスやメソッドの役割を調整している段階です。
1つのテーブルに対して新しい列を挿入するという事をオブジェクト指向に寄せて作ってみました。
というのも、以前まではsetter、getterを利用してデータの受け渡しを実施していたのですが、初めて別の方法、今回はArrayListでのデータ受け渡しを実施しました。
そこでこのArrayListでのデータ受け渡しの方法がこの方法で問題が無いのか。また、他にこういうやり方があるという事や、ArrayListであればこのやり方の方がベターだよというやり方があるのであれば是非ご教授頂きたいのです。
また別の質問として、ArrayListはStringからint変換する際にparseIntは使えないのでしょうか?
DBパラメータのAgeはIntegerのカラムですが、ひとまず動作する事を目標にしたので、そのままStringでDBへの挿入をし成功したのですが、いつかエラーが出そうで心配です。
自分で思いついたのはString型の変数にひとまず代入して、そこからint型の変数にparseIntで代入するというやり方ですが、とてつもなく不格好であると自覚できるような状態です。
こちらは既に回答頂き、解決致しました。
ひとまず、作成したコードを記載致しますので、ご指摘頂ければ幸いです。宜しくお願い致します。
Java
1public static void register() throws SQLException { 2 Regist regist = new Regist(); 3 ArrayList<String> reg = new ArrayList<String>(); 4 System.out.println("名前を入力してください"); 5 reg.add(sc.next()); 6 System.out.println("年齢を入力して下さい"); 7 reg.add(sc.next()); 8 System.out.println("住所を入力してください"); 9 reg.add(sc.next()); 10 System.out.println("性別を入力して下さい"); 11 reg.add(sc.next()); 12 reg.add(Integer.toString(regist.getDbUser())); 13 Insert insert = new Insert(); 14 insert.InsertDB(reg); 15} 16 17 18public void insertDB(ArrayList reg) throws SQLException { 19 PreparedStatement stmt = null; 20 21 DBConnection dBConn = new DBConnection(); 22 Connection conn = dBConn.dBConn(); 23 24 if((reg.get(reg.size()-1)).equals("1")) { 25 User user = new User(); 26 stmt = (PreparedStatement) user.userInsert(stmt, reg, conn); 27 }else if((reg.get(reg.size()-1)).equals("2")) { 28 Privacy privacy = new Privacy(); 29 stmt = (PreparedStatement) privacy.privacyInsert(stmt, reg, conn); 30 }else if((reg.get(reg.size()-1)).equals("3")) { 31 OtherInfo otherInfo = new OtherInfo(); 32 stmt = (PreparedStatement) otherInfo.otherInfoInsert(stmt, reg, conn); 33 } 34 stmt.executeUpdate(); 35 conn.commit(); 36 if(stmt != null)stmt.close(); 37 if(conn != null)conn.close(); 38 } 39 40public Connection dBConn() { 41 Connection conn = null; 42 43 //接続文字列 44 String url = "jdbc:postgresql://localhost:5432/sample"; 45 String user = "postgres"; 46 String password = "sample"; 47 48 try { 49 Class.forName("org.postgresql.Driver"); 50 51 52 //PostgreSQLへ接続 53 conn = DriverManager.getConnection(url, user, password); 54 55 //自動コミットOFF 56 conn.setAutoCommit(false); 57 } catch (ClassNotFoundException e) { 58 // TODO 自動生成された catch ブロック 59 e.printStackTrace(); 60 } catch (SQLException e) { 61 // TODO 自動生成された catch ブロック 62 e.printStackTrace(); 63 } 64 return conn; 65 } 66 67public Statement userInsert(Statement stmt,ArrayList reg,Connection conn) throws SQLException { 68 String sql = "INSERT INTO m_user VALUES (?,?,?,?,current_timestamp)"; 69 stmt = conn.prepareStatement(sql); 70 ((PreparedStatement) stmt).setString(1,(String) reg.get(0)); 71 //下記のStringを本当はintで値をセットしたい。 72 ((PreparedStatement) stmt).setString(2,(String) reg.get(1)); 73 ((PreparedStatement) stmt).setString(3,(String) reg.get(2)); 74 ((PreparedStatement) stmt).setString(4,(String) reg.get(3)); 75 return stmt;
回答4件
あなたの回答
tips
プレビュー