2017-01-18 1 views
0

私は今、二つのテーブル、テーブルtalkviewありますプライマリキーの値に応じて外部キーを変更する方法はありますか?

+-----------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-----------+-------------+------+-----+---------+----------------+ 
| id  | int(10)  | NO | PRI | NULL | auto_increment | 
| titlename | varchar(64) | NO |  | NULL |    | 
| postname | varchar(64) | NO |  | NULL |    | 
| counts | varchar(11) | YES |  | 0  |    | 
+-----------+-------------+------+-----+---------+----------------+ 

とテーブルmaintalk:

+----------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+----------+-------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| title | varchar(64) | NO |  | NULL |    | 
| text  | varchar(64) | NO |  | NULL |    | 
| username | varchar(64) | NO |  | NULL |    | 
| talk_id | int(10)  | YES | MUL | NULL |    | 
+----------+-------------+------+-----+---------+----------------+ 

、今私が一緒にこれらのテーブルにデータを挿入すると「talk_id」は自動的に応じ]を変更しますテーブルのtalkviewからの 'id'。 Javaで

、私はこのコードを試してみたが、「talk_idは」何の変化もありません:あなたはあなたの最初のテーブルにいくつかの件のデータを挿入した後

public void posttalk(String title, String con, String name){ 
     connection = DBConection.getConnection(); 
     Statement stmt = null; 
     String SQL_1 = "insert into talkview(titlename,postname) values(? , ?)"; 
     String SQL_2 = "insert into maintalk(title,text,username) values(? , ? , ?)"; 
     try { 
      connection.setAutoCommit(false); 
      PreparedStatement preparedStatement = connection.prepareStatement(SQL_1); 
      preparedStatement.setString(1, title); 
      preparedStatement.setString(2, name); 
      Integer a = preparedStatement.executeUpdate(); 
      preparedStatement = connection.prepareStatement(SQL_2); 
      preparedStatement.setString(1, title); 
      preparedStatement.setString(2, name); 
      preparedStatement.setString(3, con); 
      Integer b = preparedStatement.executeUpdate(); 
      connection.commit(); 
      connection.setAutoCommit(true); 
      } catch (SQLException sqle) { 
      try { 
       connection.rollback(); 
       stmt.close(); 
       connection.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
      sqle.printStackTrace(); 
      } finally { 
      DBConection.closeConnection(connection); 
     } 
    } 
+0

joinステートメントを試しましたか? 2つの挿入ステートメント – MuTiny

+0

を照会するよりもはるかに簡単です。ステートメントは照会ステートメントですか? 2つのテーブルにデータを挿入したいのですが、 'talk_id'は自分のコントロールなしで自動的に変更されます。 –

+0

@ e4c5、テーブルAはtalkviewです、テーブルBはmaintalk –

答えて

1

talkviewと呼ばれます。 の最大プライマリキーを使用して、最後に挿入したレコードを取得することができます。これは、PKが自動インクリメントであるため、maintalkテーブルのtalk_idカラムに置くためです。あなたはそれを取得するために以下のコードを行うことができます。

String SQL_1 = "insert into talkview(titlename,postname) values(? , ?)"; 
    String SQL_2 = "insert into maintalk(title,text,username,talk_id) values(? , ? , ?, ?)"; 
    String SQL_3 = "SELECT id FROM talkview order by id DESC LIMIT 1;"; 
    try { 
     connection.setAutoCommit(false); 
     PreparedStatement preparedStatement = connection.prepareStatement(SQL_1); 
     preparedStatement.setString(1, title); 
     preparedStatement.setString(2, name); 
     Integer a = preparedStatement.executeUpdate(); 

     // This is the query to retrieve the last ID you insert in talkveiw table 
     PreparedStatement preparedStatement = connection.prepareStatement(SQL_3); 
     ResultSet result = preparedStatement.executeQuery(); 
     Integer id = 0; // This will be the id you will add on your talk_id 
     if(result.next()) { 
      id = result.getInt(1); 
     } 

     preparedStatement = connection.prepareStatement(SQL_2); 
     preparedStatement.setString(1, title); 
     preparedStatement.setString(2, name); 
     preparedStatement.setString(3, con); 
     preparedStatement.setInt(4, id); // you will insert it here the 'id' 
     Integer b = preparedStatement.executeUpdate(); 
     connection.commit(); 
     connection.setAutoCommit(true); 
+0

うーん、あなたは正しいです!私は外部キーが私を制御する必要はないと思っている、それは自動的にテーブルtalkviewのプライマリキーによると 'talk_id'を生成します~~今それを実行するが、少しエラーがあります:String SQL_2 = "maintalk(title、テキスト、ユーザー名)の値(?、?、?、?) ";変更する必要があります:String SQL_2 = "maintalk(タイトル、テキスト、ユーザー名、talk_id)値に挿入します(?、?、?、?)"; –

+0

@MarioHu助けて欲しい:)、私はそれを編集しました。ありがとう。 – msagala25

関連する問題