简体   繁体   中英

JSP form returns null values while inserting into database

I have this JSP form where i have some values inserted from the previous page.

    <script language="javascript" type="text/javascript">
var i = 1;
function addRow() {
    var tbl = document.getElementById('table1');
    var lastRow = tbl.rows.length;
    var iteration = lastRow - 1;
    var row = tbl.insertRow(lastRow);
    var firstCell = row.insertCell(0);
    var el = document.createElement('input');

    el.type = 'text';
    el.name = 'name_' + i;
    el.id = 'name_' + i;
    el.size = 10;
    el.maxlength = 10;
    firstCell.appendChild(el);

    // alert(i);
    i++;
    frm.h.value = i;
    //  alert(i);
}
</script>
<form action="CreateAssignments" method="post"
enctype="multipart/form-data">
<center>
<table id="table1">
<tr>
<td>
<p>Degree :</p>
</td>
<td><label><%=request.getParameter("degree")%> </label> <input type="hidden" name="degree"
            value="<%=request.getParameter("degree")%>" /></td>
        <td></td>
        <td>
            <p>Course :</p>
        </td>
        <td><label><%=request.getParameter("course")%> </label><input
            type="hidden" name="course"
            value="<%=request.getParameter("course")%>" /></td>

    </tr>
    <tr>
        <td>
            <p>Stream :</p>
        </td>
        <td><label><%=request.getParameter("stream")%> </label><input
            type="hidden" name="stream"
            value="<%=request.getParameter("stream")%>" /></td>
        <td></td>
        <td>
            <p>Section :</p>
        </td>
        <td><label><%=request.getParameter("section")%> </label><input
            type="hidden" name="section"
            value="<%=request.getParameter("section")%>" /></td>
    </tr>
    <tr>
        <td>
            <p>Semester :</p>
        </td>
        <td><label><%=request.getParameter("semester")%></label><input
            type="hidden" name="semester"
            value="<%=request.getParameter("semester")%>" /></td>
        <td></td>
        <td>
            <p>Paper Code :</p>
        </td>
        <td><label><%=request.getParameter("papercode")%></label><input
            type="hidden" name="papercode"
            value="<%=request.getParameter("papercode")%>" /></td>
    </tr>
    <tr>
        <td><p>
                <input type="button" value="Add Questions" onclick="addRow();" />
            </p></td>


    </tr>
    <tr>
        <td><p>Start Date:</p></td>
        <td><p>
                <input type="date" name="startdate" />
            </p></td>
    </tr>
    <tr>
        <td><p>End Date:</p></td>
        <td><p>
                <input type="date" name="enddate" />
            </p></td>

    </tr>
    <tr>
        <td><p>Assignment Name:</p></td>
        <td><p>
                <input type="text" name="assname" />
            </p></td>
    </tr>
    <tr>
        <td><p>Upload File</p></td>
        <td><p>
                <input type="file" name="fileupload" value="" />
            </p></td>
    </tr>
    <tr>
        <td><p></p></td>
        <td></td>
<tr>
</table>
<p>
<input type="submit" value="Create" />
</p>
</center>
</form>

And this Java class to insert data into the database.

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    session = request.getSession(true);

    String assignmentName = request.getParameter("assname");
    String startDate = request.getParameter("startdate");
    String endDate = request.getParameter("enddate");
    String course = request.getParameter("course");
    String degree = request.getParameter("degree");
    System.out.println("degree: "+degree);
    String semester = request.getParameter("semester");
    String paperCode = request.getParameter("papercode");
    String stream = request.getParameter("stream");
    String fileName = uploadFile(request, response);
    String question1=request.getParameter("name_1");
    String question2=request.getParameter("name_2");
    String question3=request.getParameter("name_3");
    String question4=request.getParameter("name_4");
    String question5=request.getParameter("name_5");
    String question6=request.getParameter("name_6");

    System.out.println("FILE NAME : " + fileName);

    try {
        PreparedStatement ps = connection.prepareStatement("insert into assignment_master values (?,?,?,?,?,?,?,?,?,?)");
        ps.setString(1, "2");
        ps.setString(2, assignmentName);
        ps.setString(3, degree);
        ps.setString(4, course);
        ps.setString(5, stream);
        ps.setString(6, semester);
        ps.setString(7, (String) session.getAttribute("employeeId"));
        ps.setString(8, fileName);
        ps.setString(9, startDate);
        ps.setString(10, endDate);

        ps.executeUpdate();
        PreparedStatement ps1 = connection
                .prepareStatement("select max(assignment_id) assignmentId from assignment_master");
        ResultSet rs = ps1.executeQuery();

        PreparedStatement ps2 = connection.prepareStatement("insert into assignment_subject(?,?)");
        ps2.setString(1, rs.getString("assignmentId"));
        ps2.setString(2, paperCode);
        ps2.executeUpdate();

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

private String uploadFile(HttpServletRequest request, HttpServletResponse response) {

    response.setContentType("text/html");
    // PrintWriter out = response.getWriter();

    // out.println("<html>");
    // out.println("<body>");
    String value = "";
    FileItemStream fileItemStream = null;
    boolean isMultiPart = ServletFileUpload.isMultipartContent(request);
    if (isMultiPart) {
        // out.println("Yes Multipart data");

        ServletFileUpload upload = new ServletFileUpload();
        try {
            FileItemIterator itr = upload.getItemIterator(request);
            while (itr.hasNext()) {
                fileItemStream = itr.next();

                if (fileItemStream.isFormField()) {
                    // do field related work
                    String fieldName = fileItemStream.getFieldName();
                    InputStream is = fileItemStream.openStream();
                    byte[] b = new byte[is.available()];
                    is.read(b);
                    value = new String(b);
                    // out.println(fieldName + " : " + value);
                } else {
                    String path = getServletContext().getRealPath("/");
                    System.out.println("PATH : " + path);
                    if (FileUpload.processFile(path, fileItemStream, value)) {
                        System.out.println("File Uploaded Successfully");

                        // request.setAttribute("imagePath", path
                        // + fileItemStream.getName());
                        // RequestDispatcher gotoShowPage = request
                        // .getRequestDispatcher("showPage.jsp");
                        // gotoShowPage.forward(request, response);

                    } else {
                        // out.println("File Uploading failed ");
                        System.out.println("File Uploading failed ");
                    }

                }

            }

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

    } else {
        // out.println("No Multipart data");
    }

    // out.println("</body>");
    // out.println("</html>");
    return fileItemStream.getName();
}

}

But when i submit this form and try to insert data, I get an error saying primary key cannot be null and when i debug i realise that actually all the fields from the form returns null values. And i also want to know to acesss data from the dynamic textboxes and insert them.

Thank you.

Your insert statement is incorrect.

insert into assignment_master values (?,?,?,?,?,?,?,?,?,?)

You have to name columns like these:

insert into assignment_master(assignment_id, assignment_name, degree, course, stream, semester, employee_id, file_name, start_date, end_date) values (?,?,?,?,?,?,?,?,?,?)

Same is true in second insert stament:

insert into assignment_subject(?,?)

has to have column names specified.

If you do not specify column names than all columns will be assigned their default values. See [3] for MySQL.

Assuming that you are using MySQL, see INSERT syntax: [1]

For PostgreSQL see [2].

[1] http://dev.mysql.com/doc/refman/5.7/en/insert.html

[2] https://www.postgresql.org/docs/current/static/sql-insert.html

[3] http://dev.mysql.com/doc/refman/5.7/en/insert.html#idm139777556167776

Whenever you upload the form data using Multipart, the request object is converted into a stream, stream of data to be specific.

In such a scenario, you do not get the fields as parameters. They come along with the file data. The code shown below - already present in your code shown handles this:

if (fileItemStream.isFormField()) {
                        // do field related work
                        String fieldName = fileItemStream.getFieldName();
                        InputStream is = fileItemStream.openStream();
                        byte[] b = new byte[is.available()];
                        is.read(b);
                        value = new String(b);
                        // out.println(fieldName + " : " + value);
                    }

You can modify this code to create a hashmap of parameters that are present in your form. The code can be like:

HashMap<String,String> myvaluemap = new HashMap();
if (fileItemStream.isFormField()) {
    String fieldName = fileItemStream.getFieldName();
    InputStream is = fileItemStream.openStream();
    byte[] b = new byte[is.available()];
    is.read(b);
    value = new String(b);
    myvaluemap.put(name,value);
                    }

I have it tested at my end. Let me know if still any further help is required.

For your reference, you can refer to: this link . in the processing uploaded items section. It is not the exact thing, but provides the hint

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM