2017-11-30 9 views
-3

外部キーを使用して2つのテーブルに挿入する際のヘルプはありますか? 私はこれをすでに持っています。最初のときはクリックしても動作しますが、2回目以降にしようとすると外来キーは変わらず、同じままです。1つのボタンで外部キーを使用して2つのテーブルに挿入する

私のデータベーステーブル:

passenger (name, p_id) // p_id is auto-increment 
luggage (lug_id, brand, type, p_id) 

これは、これまでの私のコードです:すべての

private void InsertLuggageInfo() {  
conn = jdbcDBconnection.ConnectDB(); 
     String query_luggage, query_passenger;  
query_passenger = "INSERT INTO passenger (name) VALUES (?)"; 
stmt1 = conn.prepareStatement(query_passenger); 
stmt1.setString(1, txtFirstname.getText());  
stmt1.execute(); 
      stmt1.close(); 
} catch (SQLException ex) { 
      System.err.println(ex); 
     } 
try { 
String p_id = null;  
      String p_id_query = "SELECT p_id FROM passenger WHERE name = '" + txtFirstname.getText() + "'"; 
      stmt2 = conn.prepareStatement(p_id_query); 
      rs2 = stmt2.executeQuery(); 
      if (rs2.next()) { 
       p_id = rs2.getString("p_id"); 
      }  
query_luggage = "INSERT INTO luggage (lug_id, brand, type, p_id) VALUES (?,?,?,?)";  
stmt3 = conn.prepareStatement(query_luggage);  
stmt2.setString(1, txtLugNr.getText()); 
      stmt2.setString(2, txtbrand.getText()); 
      stmt2.setString(3, txtType.getText()); 
      stmt2.setString(4, p_id); 
stmt2.execute(); 
      stmt2.close(); 
}catch (SQLException ex) { 
      System.err.println(ex); 
     } 
+0

'rs2.getString(" passenger_id ");' - カラムの名前が 'p_id'の場合、なぜここで' passenger_id'を使用しますか? –

+0

申し訳ありません、私の悪い、それは確かにp_idです –

+0

コピー/貼り付けの代わりにStackOverflowにコードを再入力した場合、実際に実行されているものがわかりません。また、エラーメッセージやスタックトレース(存在する場合)を提供しておらず、使用しているデータが表示されて問題が発生していません。もっと詳細がなければ、私たちはあなたを助けることができません。詳細については、[help]にアクセスし、[ask]をお読みください。 –

答えて

0

まず、あなたが生成されたIDを取得する方法を変更する必要があります。ジョンスミスはたくさんあり、それはあなたに問題を与えるかもしれません。

int affectedRows = stmt1.executeUpdate(); 

if (affectedRows == 0) { 
    throw new SQLException("Insert Passenger error: no rows were affected."); 
} 

try (ResultSet generatedKeys = stmt1.getGeneratedKeys()) { 
    if (generatedKeys.next()) { 
     user.setId(generatedKeys.getLong(1)); 
    } 
    else { 
     throw new SQLException("Insert Passenger error: no ID obtained."); 
    } 
} 

これは、あなたが新しい挿入されたデータのID(あなたの乗客FK)を取得garanteeます: 次のように、stmt1.getGeneratedKeys()を使用することができます。

第2:あなたのstmt3はあなたのです。荷物はです。しかし、値を設定して、stmt2を再度実行しています。

関連する問題