JavaでDB接続の際に社員番号項目を入力させるときに主キー制約をJava上で書きたいです。
どうしてもうまくいかず悩んでいます。
Java
1 2 3 4 final String URL = "jdbc:postgresql://localhost:5432/education?serverTimezone=JST"; 5 final String USERNAME = "postgres"; 6 final String PASSWORD = "postgres"; 7 8 String empno = null; 9 String ename = null; 10 String yomi = null; 11 String job = null; 12 String mgr = null; 13 String hiredate = null; 14 String sal = null; 15 String comm = null; 16 String deptno = null; 17 int x = 0; 18 19 Scanner scanner = new Scanner(System.in); 20 21 //trueの間データの登録人数を入力させる 22 while (true) { 23 24 try { 25 System.out.println("データの登録人数を入力してください。"); 26 x = scanner.nextInt(); 27 28 try ( 29 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 30 31 Statement statement = connection.createStatement();) { 32 connection.setAutoCommit(false); 33 34 //データ登録人数分データ入力を繰り返す 35 for (int i = 0; i < x; i++) { 36 37 System.out.println(i + 1 + "人目のデータ入力です。"); 38 39 //各項目のデータ入力 40 while (true) { 41 System.out.println("社員No.を入力してください。"); 42 empno = new Scanner(System.in).nextLine(); 43 44 Pattern p = Pattern.compile("[0-9]{4}"); 45 Matcher m = p.matcher(empno); 46 47 if (m.matches()) { 48 try { 49 50 String sql = "INSERT INTO EDUCATION.EMPLOYEES values(empno)"; 51 PreparedStatement ps = connection.prepareStatement(sql); 52 int result = ps.executeUpdate(sql); 53 connection.commit(); 54 55 } catch (SQLException se) { 56 int errorCode = se.getErrorCode(); 57 58 if (errorCode == 1) { 59 60 System.out.println("主キーが重複しています。"); 61 62 } else { 63 break; 64 65 } 66 67 } 68 break; 69 70 } else { 71 System.out.println("数字四桁で入力してください。"); 72 } 73 74 } 75 76 //各項目データ入力させる 77 //コードは省略してます 78 } 79 //SQL文で入力させたデータを入れていく 80 String sql = "INSERT INTO EDUCATION.EMPLOYEES VALUES (" + "'" + empno + "'," + "'" + ename 81 + "'," 82 + "'" + yomi + "'," + "'" + job + "'," + "'" + mgr + "'," + "'" + hiredate + "'," 83 + "'" 84 + sal + "'," + "'" + comm + "'," + "'" + deptno + "')"; 85 } 86 87 //ロールバック処理 88 try { 89 connection.commit(); 90 System.out.println("登録成功"); 91 92 } catch (SQLException e) { 93 connection.commit(); 94 95 connection.rollback(); 96 System.out.println("登録失敗:ロールバック実行"); 97 98 e.printStackTrace(); 99 100 } 101 102 } catch (SQLException e) { 103 104 e.printStackTrace(); 105 106 } 107 //登録人数の無限ループ回避 108 if (x == x) { 109 break; 110 } else { 111 112 } 113 114 //登録人数のトライキャッチ 115 } catch (Exception e) { 116 System.out.println("数字で入力してください。"); 117 scanner.next(); 118 119 } 120 } 121 scanner.close(); 122 123 } 124 125} 126 127
長くて書き方とかもなってないと思うので、気になる点があったらどんどん教えてほしいです。
お願いします。
とりあえず社員番号入力させる項目の主キー制約の部分がうまくいっていません。
if (errorCode == 1) { System.out.println("主キーが重複しています。");
ここのerrorCode == なにをかけばいいかわからない
ていう感じです。
すごい見づらいと思うので、主キー制約の部分だけでも最悪大丈夫です‼
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー