【问题标题】:How to insert the dynamic added row values into the database using JDBC Servlets如何使用 JDBC Servlet 将动态添加的行值插入数据库
【发布时间】:2014-05-28 04:43:06
【问题描述】:

这是我的jsp代码,我正在使用javascript动态添加和删除行,但是在将详细信息插入数据库mysql时,它只会插入1行..如何使用servlet将动态添加的行值添加到数据库中.. 这是我的代码

<html>
<head>
<title> Timeline Sheet</title>
 <SCRIPT language="javascript">
 $('form').change(function(){
    $('form').submit();
    });
    function validLogin(){
      if (document.form.eid.value == ""){
             alert ( "Please enter Employee Id." );
              document.form.eid.focus();
              return false;
     }
    if (document.form.ename.value == ""){
             alert ( "Please enter Employee Name." );
             document.form.ename.focus();
            return false;
     }
     alert ( "Inserted Successfully" );
     return true;
}

    function addRow(tableID) {

        var table = document.getElementById(tableID);

       // rowCount = table.rows.length;
        var row = table.insertRow(1);

        var colCount = table.rows[2].cells.length;

        for(var i=0; i<colCount; i++) {

            var newcell = row.insertCell(i);

            newcell.innerHTML = table.rows[2].cells[i].innerHTML;
            //alert(newcell.childNodes);
            switch(newcell.childNodes[0].type) {
                case "text":
                        newcell.childNodes[0].value = 0;
                        break;
                case "checkbox":
                        newcell.childNodes[0].checked = false;
                        break;
                case "select-one":
                        newcell.childNodes[0].selectedIndex = 0;
                        break;
                case "value":
                    newcell.childNodes[0].value=0;
            }
        }
    }

    function deleteRow(tableID) {
        try {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;

        for(var i=1; i<rowCount; i++) {
            var row = table.rows[i];
            var chkbox = row.cells[0].childNodes[0];
            if(null != chkbox && true == chkbox.checked) {
                if(rowCount <= 3) {
                    alert("Cannot delete all the rows.");
                    break;
                }
                table.deleteRow(i);
                rowCount--;
                i--;
            }


        }
        }catch(e) {
            alert(e);
        }
    }

    function getColumnCount()
    {
        return document.getElementById('dataTable').getElementsByTagName('tr')       [1].getElementsByTagName('td').length;         
    }

    function getRowCount()
    {
        return document.getElementById('dataTable').rows.length;
    }

    function doAdd(ths)
    {
        //alert(ths.parentNode.cellIndex);
        //alert(getColumnCount());
        var lastCol = getColumnCount()-1;
        var lastRow = getRowCount()-1;
        //for Column Sum
         var table = document.getElementById("dataTable");
        var row = table.rows[ths.parentNode.parentNode.rowIndex];
        var colSum=0;
        for(var i=4;i<lastCol;i++)
            colSum=eval(colSum) + eval(row.cells[i].childNodes[0].value);
        row.cells[lastCol].innerHTML = colSum;

        //for Row Sum
        var cIndex = ths.parentNode.cellIndex;
        //alert(cIndex);
        var rowSum = 0;
        for(var i=1;i<lastRow;i++)
            rowSum = eval(rowSum) +   parseInt(table.rows[i].cells[cIndex].childNodes[0].value);
        table.rows[lastRow].cells[cIndex].innerHTML = rowSum;
        //grand Total
        var finSum = 0;

        for(var i=1;i<lastRow;i++)
            finSum = eval(finSum) + parseInt(table.rows[i].cells[lastCol].innerHTML);

        table.rows[lastRow].cells[lastCol].innerHTML = finSum;


    }


</SCRIPT>

 </head>
 <body>

<center> <b> <i>SAMPLE TIMELINE SHEET </b> </i> </center>

<br>
 <br>

 <form name="form" action="LoginServlet" method="post" onsubmit="return validLogin();">
 Employee ID:<input type="text" name="eid"><br><br>
 Employee Name:<input type="text" name="ename"><br><br>
 From Date<input type="date"  name="fromDate" />
 To Date:<input type="date" name="todate">
 <br>
<br>
 <br>

 <table id="dataTable" border="2"  cell padding="1" cell spacing="1">


<tr>
<th style="background-color:white"></th>
    <th>Project</th>
     <th>Reports</th>
<th>Activity</th>
<th > Monday </th>
<th> Tuesday </th>
<th> Wednesday</th>
<th> Thursday </th>
<th> Friday </th>
<th> Saturday </th>
<th> Sunday </th>
<th>No. Of Hrs</th>

  </tr>

   <tr>
<td><INPUT type="checkbox" name="chk"/></td>
     <td><select name="project">
    <option value="A">A</option>
    <option value="B">B</option>

    </select></td>
<td><select name="reports">
    <option value="Resource Pyramid">Resource Pyramid</option>
    <option value="Migration">Migration</option>
    <option value="Timesheet Form">Timesheet Form</option>
    <option value="Timesheet Report">Timesheet Report</option>
    </select></td>
<td> <select name="activity">
    <option value="Development">Development</option>
    <option value="Testing">Testing</option>
    <option value="Research">Research</option>
    <option value="Data Upload">Data Upload</option>
    <option value="Design Review">Design Review</option>
    <option value="Documentation">Documentation</option>
    <option value="Leave">Leave</option>
    <option value="Holiday">Holiday</option>
    <option value="Pre Sales">Pre Sales</option>
    <option value="Installation">Installation</option>
    <option value="Miscellaneous">Miscellaneous</option>
    <option value="Back Up">Back Up</option>
    <option value="Migration">Migration</option>
    <option value="Defect Fixing">Defect Fixing</option>
    </select></td>
<td><input type="number"  name="mon" value="0" onchange="doAdd(this)"></td>
    <td><input type="number" name="tue" value="0" onchange="doAdd(this)"></td>
    <td><input type="number" name="wed" value="0" onchange="doAdd(this)"></td>
    <td><input type="number" name="thur" value="0" onchange="doAdd(this)"></td>
    <td><input type="number" name="fri" value="0" onchange="doAdd(this)"></td>
     <td><input type="number" name="sat" value="0" onchange="doAdd(this)"></td>
    <td><input type="number" name="sun" value="0" onchange="doAdd(this)"></td>
    <td>0</td>
</tr>
     </table>

   <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" name="addrow" />
   <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
   <input type="button" name="save" value="Save">
   <input type="Submit" name="submit" value="Submit" >

   </form>
   </body>
   </html>

而我的 Servlet 代码是:

 public class LoginServlet extends HttpServlet {

   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub

      if (request.getParameter("submit") != null) {



        // Invoke FirstServlet's job here.

        response.setContentType("text/html");
        String id=request.getParameter("eid");
        String name=request.getParameter("ename");

        String fromdate=request.getParameter("fromdate");
        String todate=request.getParameter("todate");
        String project=request.getParameter("project");
        String reports=request.getParameter("reports");
        String activity=request.getParameter("activity");
        String mon=request.getParameter("mon");
        String tue=request.getParameter("tue");
        String wed=request.getParameter("wed");
        String thur=request.getParameter("thur");
        String fri=request.getParameter("fri");
        String sat=request.getParameter("sat");
        String sun=request.getParameter("sun"); 

        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con =    DriverManager.getConnection("jdbc:mysql://localhost:3306/timeline","root", "root");
            String stringDate ="01-01-2012 ";
            String stringDate1 ="02-01-2012 ";
            SimpleDateFormat sdf= new SimpleDateFormat("mm-dd-yyyy");
            SimpleDateFormat sdf1= new SimpleDateFormat("mm-dd-yyyy");
            java.util.Date uDate = sdf.parse(stringDate);
            java.util.Date uDate1 = sdf1.parse(stringDate1);
            java.sql.Date sqlDate = new java.sql.Date(uDate.getDate());
            java.sql.Date sqlDate1 = new java.sql.Date(uDate1.getDate());
            String sql="insert into employeeform(id,name,fromdate,todate,project,reports,activity,mon,tue,wed,thur,fri,sat,sun)value(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement stmt=con.prepareStatement(sql);

            stmt.setString(1, id);
            stmt.setString(2,name);
            stmt.setString(3,fromdate);
            stmt.setString(4,todate);
            stmt.setString(5,project);
            stmt.setString(6,reports);
            stmt.setString(7, activity);
            stmt.setString(8,mon);
            stmt.setString(9,tue);
            stmt.setString(10,wed);
            stmt.setString(11, thur);
            stmt.setString(12, fri);
            stmt.setString(13,sat);
            stmt.setString(14,sun);
            stmt.executeUpdate();
            System.out.println("inserted successfully");

            response.sendRedirect("success.jsp"); 

        }
        catch(Exception e)
        {
            System.out.println(e);
            response.sendRedirect("error.jsp"); 



        }


    } else if (request.getParameter("save") != null) {
        // Invoke SecondServlet's job here.
        response.setContentType("text/html");
        String id=request.getParameter("eid");
        String name=request.getParameter("ename");
        String fromdate=request.getParameter("fromdate");
        String todate=request.getParameter("todate");
        String project=request.getParameter("project");
        String reports=request.getParameter("reports");
        String activity=request.getParameter("activity");
        String mon=request.getParameter("mon");
        String tue=request.getParameter("tue");
        String wed=request.getParameter("wed");
        String thur=request.getParameter("thur");
        String fri=request.getParameter("fri");
        String sat=request.getParameter("sat");
        String sun=request.getParameter("sun");
        String msg=null;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/timeline","root", "root");
            String sql="insert into partialentered(id,name,fromdate,todate,project,reports,activity,mon,tue,wed,thur,fri,sat,sun)value('"+id+"','"+name+"','"+fromdate+"','"+todate+"','"+project+"','"+reports+"','"+activity+"','"+mon+"','"+tue+"','"+wed+"','"+thur+"','"+fri+"','"+sat+"','"+sun+"')";
            Statement stmt=con.createStatement();
            int rs=stmt.executeUpdate(sql);
            System.out.println("inserted successfully");


        }
        catch(Exception e)
        {
            System.out.println(e);
        }



    }
}

}

在提交表单时它告诉插入成功,但它只存储 1 行详细信息。请帮助我如何更改此 servlet 代码,以便我可以将动态添加行值也插入到数据库中。

提前致谢。

U 可以使用 jfiddle 查看输出:http://jsfiddle.net/UnuaX/ 当我使用添加行按钮并将值插入新添加的行时,它不会将这些详细信息插入数据库。

【问题讨论】:

  • 代码太长。摆弄一下吧。

标签: javascript jsp servlets jdbc


【解决方案1】:

您需要绑定一个事件侦听器来提交您希望数据库更新的任何操作的表单数据。例如,如果更改某些输入表单,请使用 jquery:

$('form').change(function(){
   $('form').submit();
});

【讨论】:

  • 但是如何将添加的新行的参数带入servlet。
  • 当你提交表单时,表单内的所有输入字段都会默认提交给servlet。这就像每次任何字段的值发生变化时都重新提交表单。如果那是你打算做的。
【解决方案2】:

试试这个:

public class LoginServlet extends HttpServlet {

   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub

          String id1="",name1="",fromdate1="";

            String id[]=request.getParameterValues("eid");
            String name[]=request.getParameterValues("ename");
            String fromdate[]=request.getParameterValues("fromdate");


    try{
          Class.forName("com.mysql.jdbc.Driver");
        Connection con =  DriverManager.getConnection("jdbc:mysql://localhost:3306/timeline","root", "root");
         Statement st=null;
         st=con.createStatement();
        for (int i=0;i<id.length;i++)
         {
            id1=id[i];
            name1=name[i];
            fromdate1=fromdate[i];

          String sql="insert into partialentered(id,name,fromdate)values('"+id1+"','"+name1+"','"+fromdate1+"')";

                int rs=stmt.executeUpdate(sql);
               }
        con.close();
    }catch(Exception e){
      e.printStackTrace();
    }
   }
}   

【讨论】:

  • 使用 Statement 对象作为 'st' in:- int rs=st.executeUpdate(sql);在上面的代码中使其正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 2014-04-20
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
相关资源
最近更新 更多