2017-06-11 21 views
0

我現在已經瞭解到,爲了以多對多的關係插入到橋接表中,我必須使用get生成的鍵來獲取自動增量ID。我應該如何通過獲取生成的密鑰插入自動增量ID?

我現在面臨的問題我認爲是我的代碼設計。

我使用的是DAO,DAOImpl和普通的jdbc。

在我tutorDAOImpl,我有這樣的代碼:

 public void insertTutor(tutor m) throws MyDataException { // 
    openConnection(); 
    try { 
     connection.setAutoCommit(false); 
    } catch (SQLException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    String qry = INSERT_QRY;  
     try (      

     PreparedStatement ps = connection.prepareStatement(qry, Statement.RETURN_GENERATED_KEYS)) {;    
     // ps = connection.prepareStatement(qry, Statement.RETURN_GENERATED_KEYS);  
     ps.setString(1, m.getName()); 
     ps.setString(2, m.getNRIC()); 
     ps.setString(3, m.getEmail()); 
     ps.executeUpdate();    
     connection.commit(); 
     ResultSet tableKeys = ps.getGeneratedKeys(); 
     while(tableKeys.next()) 
     tableKeys.next(); 
     int tutor_id = tableKeys.getInt(1); 
     m.setTutor_id(tutor_id); 
     System.out.println(tutor_id); 
     } catch (SQLException e) { 
    e.printStackTrace(); 
    throw new MyDataException("DB Error"); 
    } finally { 
    if (ps != null) { 
    closeConnection(); 
}}}} 

我再重複了subjectDAO相同。

然後我使用控制器讀取參數值等,並使用服務類插入此DAOImpl。

現在,我應該在tutorDAOImpl和subjectDAOImpl中創建一個獲取Int方法,以便通過控制器將兩個Ids插入到第三個表中。

但是,我發現我會重複int方法中的void insert(tutor m)中的大部分代碼,以獲得Ids的返回值。

我不知道是否有更好的方法來編寫代碼。希望有一些建議。韓國社交協會。

+0

你爲什麼認爲插入導師,然後是主題會是錯誤的? – Mureinik

+0

因爲我不知道如何處理tutor_subject鏈接表。我希望只要有一個插入語句,tutor_subject也會填充相關信息。 –

回答

0

MySQL不支持在一個命令中插入多個表。
但是,如果你想要寫的所有/無故障,你應該使用交易的情況如下:

BEGIN; 
INSERT INTO tutor (tutorId,tutorName. . . . .) 
    VALUES(. . .); 
INSERT INTO subject (. . .) 
    VALUES( . .); 
INSERT INTO tutor_subject (. . .) 
    VALUES( . .); 
COMMIT; 

根據你的表,請更新查詢屬性,基於應用層&語法你使用。我還建議在表tutor_subject(tutor_id - > tutor和subject_id to subject)中使用外鍵以避免數據中的任何不一致。

希望你有想法,這可能會幫助你。

+0

如果我堅持插入導師的情況,然後插入主題,我應該如何處理第三表在查詢方面?根據場景我的數據庫設計是否正確? –

+0

是的設計是完美的,很好地規範化。在第三個表格中,插入指導教師要求導師ID的主題的映射,主題ID應該是相應表格中這些ID的外鍵 – abhinsit

+0

應該使用連接表還是插入我的第三個表格,因爲它是自動遞增的對於兩個表? –

相關問題