首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JSP中使用Ajax保存多条记录

如何在JSP中使用Ajax保存多条记录
EN

Stack Overflow用户
提问于 2015-03-23 17:04:46
回答 1查看 2.2K关注 0票数 1

我想在不刷新页面的情况下在数据库中保存多条记录。为此,我使用Ajax。但它一次只保存一条记录。

我的JSP代码(CustomerInvoice.jsp):

代码语言:javascript
运行
复制
<%@ page import="java.sql.Statement" import="java.sql.ResultSet" import="java.sql.Connection" import="java.util.*" %> 
<%@page import="connection.DBConnection"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Customer Invoice wise </title>
<script type="text/javascript">
$(document).ready(function() 
          {
$('#customersubmit').click(function(e) 
            {
                e.preventDefault();

                var c1 = $("#dte").val();
                var c2 = $("#cname").val();
                var c3 = $("#ccd").val();
                var c4 = $("#cred").val();
                var c5 = $("#inn").val();
                var c6 = $("#innamt").val();
                var c7 = $("#amtadjust").val();
                var c8 = $("#balamt").val();

                var value ='dte='+c1+'&cname='+c2+'&ccd='+c3+'&cred='+c4+'&inn='+c5+'&innamt='+c6+'&amtadjust='+c7+'&balamt='+c8;


                $.ajax({
                        type:"get",
                        url: "CustomerInvoiceServlet1", 
                        data:  value, 
                        cache: false,
                        success: function(data) 
                        {
                            //$('#ramountt').val(c8); 
                        }
                    });

                });
          });

    </script>


<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>


</head>
<body>
<h2 align="center"> Customer Invoice wise outstanding</h2>
<form name="bankledgerreport" action="CustomerInvoiceServlet1" method="get" >

<table align="center" border=5 width=700>
<tr><th>Date</th>
<th>Invoice Number</th>
<th>Invoice Amount</th>
<th>Amount Adjusted</th>
<th>Balance Amount</th></tr>



<%  DBConnection dbc=new DBConnection();
            Connection con=dbc.getNewConnection();
            Statement st = null;
            ResultSet rs = null;
            String selectedcustcode = request.getParameter("acc");

            ///int count=1;
            double debtors=0, creditors=0, cashbank=0, fixedassets=0, other=0, capital=0, otherexpenses=0, sellingandmarketing=0, salaryandwages=0, administrativecharges=0, provision=0, unsecuredloans=0, securedloans=0, investments=0, closingstock=0, openingstock=0, loansandadvances=0, indirectincome=0, bankchargesandinterest=0, depreciation=0; //trial balance
            //out.println(selectedcustcode);
            double bal=0.0,in=0.0,adj=0.0,bal1=0.0,bal2=0.0;

            String dte="",nm="",cd="",inn="",inn1="";
            List li=new ArrayList();
            %>  

            <%
            try
            {
                  st=con.createStatement() ;



                          rs=st.executeQuery("SELECT innum,date,svname,ccode,balance,scred FROM salesinvoiceoutstanding WHERE  EXISTS (SELECT  innum FROM salesvoucher2  WHERE  salesinvoiceoutstanding.innum = salesvoucher2.innum ) and ccode='"+selectedcustcode+"'");
                          while(rs.next())
                          {

                              inn=rs.getString(1);
                                dte=rs.getString(2);
                                nm=rs.getString(3);
                                cd=rs.getString(4);
                                 bal=rs.getDouble(5);
                                 bal1=bal1+bal;
                                 int cred=rs.getInt(6);
                                 %>
                                    <input type=hidden name=cname id=cname class=cname value="<%=nm%>"/>
                  <input type=hidden name=ccd id=ccd class=ccd value="<%=cd%>"/>
                <input type=hidden name=cred id=cred class=cred value="<%=cred%>"/>
             <tr>
             <td><input type=hidden id=dte name=dte class=dte value="<%=dte %>"/><%=dte %></td>

             <td><input type=hidden id=inn name=inn class=inn value="<%=inn %>"/><%=inn %></td>



            <td><input type=hidden  name=innamt id=innamt class=innamt value="<%=bal %>"/><%=bal %></td>
             <td><input type=text name=amtadjust id=amtadjust class=amtadjust value="0"  /></td>
             <td><input type=text name=balamt id=balamt class=balamt value="<%=bal %>" /></td>

              </tr>
          <%} 
                          rs=st.executeQuery("SELECT innum,date,scname,ccode,stota,scredlim FROM salesvoucher2 WHERE not EXISTS (SELECT  innum FROM salesinvoiceoutstanding  WHERE  salesinvoiceoutstanding.innum = salesvoucher2.innum ) and (ccode='"+selectedcustcode+"' and status=1)");
                          while(rs.next())
                          {

                              inn=rs.getString(1);
                                dte=rs.getString(2);
                                nm=rs.getString(3);
                                cd=rs.getString(4);
                                 in=rs.getDouble(5);
                                 bal2=bal2+in;
                                 int cred=rs.getInt(6);   

                        %>  
                        <input type=hidden name=cname id=cname class=cname value="<%=nm%>"/>
                  <input type=hidden name=ccd id=ccd class=ccd value="<%=cd%>"/>
                <input type=hidden name=cred id=cred class=cred value="<%=cred%>"/>
             <tr>
             <td><input type=hidden id=dte name=dte class=dte value="<%=dte %>"/><%=dte %></td>

             <td><input type=hidden id=inn name=inn class=inn value="<%=inn %>"/><%=inn %></td>
            <td><input type=hidden  name=innamt id=innamt class=innamt value="<%=in %>"/><%=in %></td>
             <td><input type=text name=amtadjust id=amtadjust class=amtadjust value="0"  /></td>
             <td><input type=text name=balamt id=balamt class=balamt value="<%=in %>" /></td>

              </tr>

<%                
            }}
               catch(Exception e)
               {} %>
               <% double amount=bal1+bal2; %>
               <tr><td></td><td>Advanced Received</td><td></td><td><input type=text name=advance id=advance value="0"/></td><td></td></tr>
               <tr><td></td><td>Total</td><td></td><td><input type=text name=total id=total value="0" onblur="sub()" /></td><td><input type="text" name="totamt" value="<%=amount %>"  /></td></tr>

 </table>
 <br><br>
<center> <input type=button name="customersubmit" id="customersubmit" value=Save></center>
        </form>     
</body>
</html>

在上图中,我必须使用Ajax将SV2和SV3 (发票编号)这两条记录保存在数据库中。

我的servlet代码:(CustomerInvoiceServlet1.java)

代码语言:javascript
运行
复制
package com;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import connection.DBConnection;

/**
 * Servlet implementation class CustomerInvoiceServlet1
 */
public class CustomerInvoiceServlet1 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public CustomerInvoiceServlet1() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        String dt1="",nm1="",cd1="",in1="",amt1="",amtadj1="",balamt1="",cr1="";
        int crd[] = null;
        //int cr1=0;
        DBConnection dbc=new DBConnection();
        Connection con=dbc.getNewConnection();
        Statement st = null;
        ResultSet rs=null;
        String dt[] = request.getParameterValues("dte"); 
        String nm[]=request.getParameterValues("cname");
        String cd[]=request.getParameterValues("ccd");
        String cr[]=request.getParameterValues("cred");
        String in[]=request.getParameterValues("inn");
        //int count[]=Integer.parseInt(request.getParameterValues("cnt1"));
        String amt[]=request.getParameterValues("innamt");
     String amtadj[]=request.getParameterValues("amtadjust");
    String balamt[]=request.getParameterValues("balamt");

    String  query="";
     double pyamt=0.0;

  try{
     st=con.createStatement();
    for (int i=0;i<in.length;i++)
    {
        cd1=cd[i];
        String  query1="delete from salesinvoiceoutstanding where ccode = '"+cd1+"';";
        st.executeUpdate(query1);
    }

  for (int i=0;i<in.length;i++) {

      dt1=dt[i];
     nm1=nm[i];
     cd1=cd[i];
     cr1=cr[i];
     in1=in[i];
     amt1=amt[i];
     amtadj1=amtadj[i];
     balamt1=balamt[i];

     query="INSERT INTO salesinvoiceoutstanding(date,innum,svname,ccode,svamount,adjamount,balance,scred) VALUES('"+dt1+"','"+in1+"','"+nm1+"','"+cd1+"','"+amt1+"','"+amtadj1+"','"+balamt1+"','"+cr1+"')";
    int j=st.executeUpdate(query);

    }

    con.close();


}catch(Exception e){
  e.printStackTrace();
}

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

最重要的是,编码只保存第一条记录,即SV2。因此,我的问题是如何使用Ajax一次将这两条记录(SV2和SV3)或更多记录保存到数据库中。

EN

回答 1

Stack Overflow用户

发布于 2015-03-23 17:15:26

您可以执行以下形式的查询,以便在MySQL中使用一个查询INSERT多个记录:

代码语言:javascript
运行
复制
INSERT INTO salesinvoiceoutstanding (date,innum,...) VALUES(dt1,in1,...),(dt2,in2,...),(dt3,in3,...);

下面是一些示例代码,它允许您处理来自AJAX调用的任意数量的INSERT

代码语言:javascript
运行
复制
String query = "INSERT INTO salesinvoiceoutstanding(date,innum,svname,ccode,svamount,adjamount,balance,scred) ";
for (int i=0; i<in.length; ++i) {

    dt1=dt[i];
    nm1=nm[i];
    cd1=cd[i];
    cr1=cr[i];
    in1=in[i];
    amt1=amt[i];
    amtadj1=amtadj[i];
    balamt1=balamt[i];

    if (i > 0) {
        query += ",";
    }

    query += "VALUES('"+dt1+"','"+in1+"','"+nm1+"','"+cd1+"','"+amt1+"','"+amtadj1+"','"+balamt1+"','"+cr1+"')";
}

query += ";"; // don't forget the semi-colon at the end of the query

int j=st.executeUpdate(query);

顺便说一句,你应该非常小心你的代码中的SQL注入攻击。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29206417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档