現在JavaでDB連携の勉強をしております。
その中で疑問に思ったのですが、現在3つのテーブルをそれぞれユーザーIDで管理し、それを結合して出力するという事を行う上で、Javaからそれぞれのテーブルのデータ更新や登録、消去を行おうとしています。
やりたい事は概ね出来上がってきたのですが、その中で更新、登録、消去をそれぞれクラスを作り、メインメソッドでそれぞれのクラスを呼び出し、その中でそれぞれの処理を実施しています。
まず1点は、この方法はJavaの考え方では正しい方法なのでしょうか?
そして2点目ですが、その各クラスの中でその3つのテーブルの操作を同じメソッドで行っていますが、メインメソッドからクラスを呼び出す際にそれぞれを識別する値を引数で渡し、それを元にif分で分岐させ、それぞれの処理を実施していますが、その方法ですとどうしてもコードが長くなってしまいます。
果たしてJavaではこのようなやり方で合っているのでしょうか?
下記にその呼び出されるクラスの中でも一番短いDB登録後のID検索のメソッドを添付致します。
例えばDB更新のクラスですとこの数倍の長さになります。
お手数ですがご見解を教えていただけますでしょうか。宜しくお願い致します。
Java
1public class Serch { 2 public int SerchID() { 3 int Uid = 0; 4 Connection conn = null; 5 PreparedStatement stmt = null; 6 ResultSet rset = null; 7 8 //接続文字列 9 String url = "jdbc:postgresql://localhost:5432/sample"; 10 String user = "postgres"; 11 String password = "Password"; 12 13 try{ 14 Class.forName("org.postgresql.Driver"); 15 16 //PostgreSQLへ接続 17 conn = DriverManager.getConnection(url, user, password); 18 19 //自動コミットOFF 20 conn.setAutoCommit(false); 21 22 //SELECT文の実行 23 String sql = "SELECT MAX(Uid) FROM m_user"; 24 stmt = conn.prepareStatement(sql); 25 rset = stmt.executeQuery(); 26 27 //SELECT結果の受け取り 28 while(rset.next()){ 29 Uid = Integer.parseInt(rset.getString(1)); 30 } 31 } 32 catch (ClassNotFoundException e) { 33 e.printStackTrace(); 34 } 35 catch (SQLException e){ 36 e.printStackTrace(); 37 } 38 finally { 39 try { 40 if(rset != null)rset.close(); 41 if(stmt != null)stmt.close(); 42 if(conn != null)conn.close(); 43 } 44 catch (SQLException e){ 45 e.printStackTrace(); 46 } 47 48 } 49 return Uid; 50 } 51 52 public void LatestDate(int Uid,int DB) { 53 Connection conn = null; 54 PreparedStatement stmt = null; 55 ResultSet rset = null; 56 57 //接続文字列 58 String url = "jdbc:postgresql://localhost:5432/sample"; 59 String user = "postgres"; 60 String password = "Qoakzm12"; 61 62 try{ 63 Class.forName("org.postgresql.Driver"); 64 65 //PostgreSQLへ接続 66 conn = DriverManager.getConnection(url, user, password); 67 68 //自動コミットOFF 69 conn.setAutoCommit(false); 70 71 //SELECT文の実行 72 if(DB == 1) { 73 String sql = "SELECT * FROM m_user WHERE Uid = ?"; 74 stmt = conn.prepareStatement(sql); 75 stmt.setLong(1,Uid); 76 rset = stmt.executeQuery(); 77 78 //SELECT結果の受け取り 79 while(rset.next()){ 80 System.out.println("1件の登録が完了しました。"); 81 System.out.println("名前:" + rset.getString(1)); 82 System.out.println("年齢:" + rset.getString(2)); 83 System.out.println("住所:" + rset.getString(3)); 84 System.out.println("性別:" + rset.getString(4)); 85 System.out.println("登録日:" + rset.getString(5)); 86 System.out.println("ユーザーID:" + rset.getString(6)); 87 } 88 }else if(DB == 2) { 89 String sql = "SELECT * FROM privacy_tbl WHERE UserId = ?"; 90 stmt = conn.prepareStatement(sql); 91 stmt.setLong(1,Uid); 92 rset = stmt.executeQuery(); 93 94 //SELECT結果の受け取り 95 while(rset.next()){ 96 System.out.println("1件の登録が完了しました。"); 97 System.out.println("ユーザーID:" + rset.getString(1)); 98 System.out.println("EMAILアドレス:" + rset.getString(2)); 99 System.out.println("電話番号:" + rset.getString(3)); 100 System.out.println("郵便番号:" + rset.getString(4)); 101 System.out.println("居住国:" + rset.getString(5)); 102 } 103 }else if(DB == 3) { 104 String sql = "SELECT * FROM Otherinfo WHERE InfoId = ?"; 105 stmt = conn.prepareStatement(sql); 106 stmt.setLong(1,Uid); 107 rset = stmt.executeQuery(); 108 109 //SELECT結果の受け取り 110 while(rset.next()){ 111 System.out.println("1件の登録が完了しました。"); 112 System.out.println("ユーザーID:" + rset.getString(1)); 113 System.out.println("趣味:" + rset.getString(2)); 114 System.out.println("特技:" + rset.getString(3)); 115 System.out.println("夢:" + rset.getString(4)); 116 } 117 } 118 } 119 catch (ClassNotFoundException e) { 120 e.printStackTrace(); 121 } 122 catch (SQLException e){ 123 e.printStackTrace(); 124 } 125 finally { 126 try { 127 if(rset != null)rset.close(); 128 if(stmt != null)stmt.close(); 129 if(conn != null)conn.close(); 130 } 131 catch (SQLException e){ 132 e.printStackTrace(); 133 } 134 135 } 136 } 137 138}
回答3件
あなたの回答
tips
プレビュー