【问题标题】:inserting java array values into mysql by using prepared statement使用准备好的语句将java数组值插入mysql
【发布时间】:2014-05-13 11:13:27
【问题描述】:

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

  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();

【问题讨论】:

  • @NayanWadekar 能否请您给我一些工作示例
  • 它已经在那里了,你有没有尝试过;如果遇到问题,请更新帖子。
  • @NayanWadekar 抱歉,我是 Java 新手,所以我不知道如何输入地图
  • @NayanWadekar 我可以把我的代码邮寄给你吗?

标签: java jdbc


【解决方案1】:

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

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

  //Getters & Setters
}

现在回到你的代码,你应该注意到这是一个疯狂的猜测,因为我真的可以弄清楚你希望数据如何进入你的表格: * 你想在单个列中存储一个 remarks 数组吗? * 或者那些 备注 分别代表一个单独的记录?

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

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();
    }
  }
}

然后,当您从控制器 (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
  }
}

【讨论】:

  • 谢谢,但我想在页面插入后重定向页面,如何在每次迭代的 for 循环中实现这一点
  • 每次迭代后如何重定向?如果您通过@Selva 添加建议的行,则只会插入第一条语句,然后将重定向客户端。
  • 不,我需要在整个迭代完成后重定向页面
  • 因此您必须将重定向行移出迭代,我将更新我的答案,您可以将其标记为已接受甚至投票,以便将来的访问者有资格;)
  • 嗨 tmarwen,我能知道在这种情况下我是否可以将 getPost 用于 MySservlet 吗?
【解决方案2】:

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

【讨论】:

  • 我可以给我你的邮件ID,我自己也来自哥印拜陀
  • @user3626977 首先不要向google 询问这样的代码,搜索我的链接的示例将为您提供帮助,如果有任何问题,请搜索相关答案,如果不发布问题。
  • @user3626977 我不是要伤害你,你错了,如果搜索成功,答案就是我的想法..
  • @user3626977 您是如何搜索此解决方案的?你用什么关键词来找到解决方案,我的SearchLink在这里...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2019-09-24
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多