2016-12-14 58 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' –