Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用prepared语句将java数组值插入mysql_Java_Jdbc - Fatal编程技术网

使用prepared语句将java数组值插入mysql

使用prepared语句将java数组值插入mysql,java,jdbc,Java,Jdbc,嗨,朋友们,在我的代码中,我使用request.getParameterValues以数组的形式从JSP页面接收值,并将其传递给getter setter,从那里传递给DAO,但我不知道如何使用prepared语句将每个数组元素的值插入数据库。我的疑问是如何为我的代码每次迭代插入备注、数量、开始时间和结束时间 Servlet Code : String[] remarks = request.getParameterValues("txtRemarks"); String[] q

嗨,朋友们,在我的代码中,我使用request.getParameterValues以数组的形式从JSP页面接收值,并将其传递给getter setter,从那里传递给DAO,但我不知道如何使用prepared语句将每个数组元素的值插入数据库。我的疑问是如何为我的代码每次迭代插入备注、数量、开始时间和结束时间

  Servlet Code : 

  String[] remarks = request.getParameterValues("txtRemarks");
  String[] quantity = request.getParameterValues("txtQty");
  String[] startHrs = request.getParameterValues("txtStartTime");
  String[] endHrs = request.getParameterValues("txtEndtime");

  getter setter :

  public String[] getremarks() {  
  return getremarks;  
  }  
  public void setremarks(String[] newremarks) {  
  remarks = newremarks;  
  } 

 UserDAO :


         String query = "insert into table(remarks,quantity,startTime,endTime) values (?,?,?,?) "
         currentCon = ConnectionManager.getConnection();
         ps = currentCon.prepareStatement(query);
         rs = ps.executeQuery();

尽管我认为您应该更新应用程序设计,但更具体地说,应该更新从servlet获取数据的方式。 应该有一个名为MyBean的bean,用于保存要存储到数据库中的每个实体的数据,这些实体没有单独的属性数组:

class MyBean {
  String remark;
  String quantity;
  String startTime; //You said it is a String but maybe should be a timestamp
  String endTime;

  //Getters & Setters
}
现在回到您的代码,您应该注意,这是一个大胆的猜测,因为我可以真正了解您希望数据如何进入表中: *是否要在单个列中存储备注数组? *或者这些评论都是单独记录的

假设您使用第二种方法,您的数据访问层服务可以如下所示:

public void insertMyEntity(String remark,
  String quantity,
  String startTime,
  String endTime) throws SQLException {

  Connection con = ConnectionManager.getConnection();
  PreparedStatement insertStatement = null;
  String insertString =
    "insert into YOUR_TABLE(remarks,quantity,startTime,endTime) values (?,?,?,?)";

  try {
    insertStatement = con.prepareStatement(insertString);
    insertStatement.setString(1, remark);
    insertStatement.setString(1, quantity);
    insertStatement.setString(1, startTime);// use setTimestamp() if it is a timestamp
    insertStatement.setString(1, endTime);
    insertStatement.executeUpdate();
  } catch (SQLException e ) {
      System.out.println(e.getMessage());
  } finally {
    if (insertStatement != null) {
      insertStatement.close();
    }
    if (con != null) {         
      con.close();
    }
  }
}
然后,当您从controller Servlet中的客户端请求中检索到数据时,可以使用循环对其进行迭代并插入到数据库:

public class MySservlet extends HttpServlet
{
  protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException
  {
    ...
    String[] remarks = request.getParameterValues("txtRemarks");
    String[] quantity = request.getParameterValues("txtQty");
    String[] startHrs = request.getParameterValues("txtStartTime");
    String[] endHrs = request.getParameterValues("txtEndtime");

    for (int i = 0; i < remarks.length; i++)
    {
      insertMyEntity(remarks[i], quantity[i], startHrs[i], endHrs[i]);
    }
    response.sendRedirect("resourceuri");//replace the resource with servlet, jsp or html URL
  }
}

tmarwen代码可以正常工作,您只需替换下面的try

try {
    insertStatement = con.prepareStatement(insertString);
    insertStatement.setString(1, remark);
    insertStatement.setString(1, quantity);
    insertStatement.setString(1, startTime);// use setTimestamp() if it is a timestamp
    insertStatement.setString(1, endTime);
    insertStatement.executeUpdate();
  } catch (SQLException e ) {
      System.out.println(e.getMessage());
  } finally {
    if (insertStatement != null) {
      insertStatement.close();
    } if (con != null) {         
      con.close();
    }
  }
response.sendRedirect("servlet/jsp");//Where ever you require to redirect

试着浏览文档-@NayanWadekar你能给我推荐一些工作示例吗?它已经存在了,你有没有浏览过&尝试过什么;如果遇到问题,请更新帖子。@NayanWadekar抱歉,我是java新手,所以我不知道如何进行映射entry@NayanWadekar我可以把我的代码邮寄给你吗?谢谢,但是我想在插入页面后重定向页面。如何在for循环中为每次迭代实现重定向?每次迭代后如何重定向?如果您通过@Selva添加建议行,则只会插入第一条语句,然后客户端将被重定向。不,我需要在整个迭代完成后重定向页面,因此您必须将重定向行移出迭代,我将更新我的答案,你可以将其标记为已接受,甚至更新投票,这样它就有资格成为未来的访客;嗨,特马尔文,我可以知道在这种情况下我是否可以使用getPost来创建MySservlet吗?我可以从您的邮箱中获得您的邮件id吗coimbatore@user3626977首先,不要像这样问代码,搜索我的链接的示例将帮助您,如果有任何问题,请搜索相关答案,如果没有发布问题。@user3626977我不是有意的伤害你,你错了,如果搜索去了,答案来了这是我的想法。@user3626977你是如何搜索这个解决方案的?你用什么关键词来寻找答案,我的答案在这里。。。