使用prepared语句将java数组值插入mysql
嗨,朋友们,在我的代码中,我使用request.getParameterValues以数组的形式从JSP页面接收值,并将其传递给getter setter,从那里传递给DAO,但我不知道如何使用prepared语句将每个数组元素的值插入数据库。我的疑问是如何为我的代码每次迭代插入备注、数量、开始时间和结束时间使用prepared语句将java数组值插入mysql,java,jdbc,Java,Jdbc,嗨,朋友们,在我的代码中,我使用request.getParameterValues以数组的形式从JSP页面接收值,并将其传递给getter setter,从那里传递给DAO,但我不知道如何使用prepared语句将每个数组元素的值插入数据库。我的疑问是如何为我的代码每次迭代插入备注、数量、开始时间和结束时间 Servlet Code : String[] remarks = request.getParameterValues("txtRemarks"); String[] q
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你是如何搜索这个解决方案的?你用什么关键词来寻找答案,我的答案在这里。。。