2016-12-14 94 views
-1

我試圖用Struts2在MySQL DB中一次插入多行(動態行 - 從DB中檢索)。
爲此,首先我從數據庫表中檢索HTML表格中的數據(並且這些行是動態的,這意味着它取決於特定用戶ID在數據庫中有多少個條目)。
在我的HTML表格中,有六列從中檢索五個數據庫和最後一列條目,用戶必須填寫。如何在MySQL DB中使用Struts2一次插入多行?

現在我想要將這些整個數據(與從DB中檢索到的最後一列的新條目一樣多的行)插入另一個DB表中。
現在我可以插入整個數據,但它不會被存儲在數據庫表中的單獨行中,它只是以逗號分隔的單行存儲。

任何幫助將不勝感激...提前致謝!

+0

你應該添加你的代碼。 – iHasCodeForU

+0

html和java代碼請 – Romeo

回答

0

感謝您的幫助的人......我找到解決方案! 在將數據發送到數據庫之前,我將特定行的每個數據項分開......並且它正在工作! :)

0

您可以嘗試在批處理執行記錄Read Here
變化execute爲合格名單

public String execute() throws Exception 
{ 
    String ret = "SUCCESS"; 
    try 
    { 
     msg = db.Detailsdb.addMoreDetails(details); 
     if(msg != null) 
     { 
      System.out.println(msg); 
      return ret; 
     } 
     else 
      ret = "ERROR"; 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
    return ret; 
} 

更改數據庫的邏輯添加批次

public static String addMoreDetails(List<Details> details) throws Exception 
{ 
    try 
    { 
    java.sql.CallableStatement cs = connect().prepareCall("{call addUpdMoreDetails(?,?,?,?,?,?,?,?,?)}"); 
    for(Details det : details) { 
     cs.setString(1, "I"); 
     cs.setString(2, det.detailsId); 
     cs.setString(3, det.userId); 
     cs.setString(4, det.info_1); 
     cs.setString(5, det.info_2); 
     cs.setString(6, det.info_3); 
     cs.setString(7, det.info_4); 
     cs.setString(8, det.info_5); 
     cs.registerOutParameter(9, Types.VARCHAR); 
     cs.addBatch(); 
    } 
    int counts[] = cs.executeBatch(); 
    if (counts.length == details.size) 
     return "someMEssage"; 
    else 
     return null; 
    } 
    catch(Exception ex) 
    { 
    return ex.toString(); 
    } 
} 
+0

嘿shantaram ... thnks回覆!但對我所需要的沒有幫助。我嘗試了一些小改動,比如我使用「det.getDetailsId」而不是「det.detailsId」,並用「details.size()」替換了「details.size」。 首先它給了我「java.sql.SQLException:不能調用executeLatch()的CallableStatement與OUTPUT參數」消息,同時執行,之後,我從我的代碼中刪除參數,只傳遞8個參數比給我「Java。 sql.SQLException:噓!「信息。 –

+0

剛纔我在我的程序中做了一些改變,我只傳遞了7個參數(也刪除了'I'用於插入(來自過程和java類)),現在它以前面的方式插入數據。 還沒有改進.. !! :( –

+0

提供您的存儲過程'addUpdMoreDetails' –