java - JSP表单插入数据库时​​返回空值

标签 java mysql eclipse jsp servlets

我有这个 JSP 表单,其中插入了一些从上一页插入的值。

    <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>

这个 Java 类将数据插入数据库。

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

}

但是当我提交此表单并尝试插入数据时,我收到一条错误消息,指出主键不能为空,并且当我调试时,我意识到实际上表单中的所有字段都返回空值。我还想知道如何从动态文本框中访问数据并插入它们。

谢谢。

最佳答案

您的插入语句不正确。

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

您必须像这样命名列:

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

第二个插入语句也是如此:

insert into assignment_subject(?,?)

必须指定列名称。

如果您不指定列名称,则所有列都将被分配默认值。 MySQL 参见[3]。

假设您使用的是 MySQL,请参阅 INSERT 语法:[1]

对于 PostgreSQL,请参阅 [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

关于java - JSP表单插入数据库时​​返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564186/

相关文章:

eclipse - 如何使用 EGit 发出 pull 请求?

java - 设计队列线程消费者的性能问题

java - Hibernate 关闭 MySQL 连接

php - 多时区 - 如何正确存储/打印数据

java - android studio 中的 Eclipse keystore

java - Eclipse 无法识别 java api

java - 如何在特定日期在java中运行 future 的任务

java - Spring中如何在一个事务方法中管理多个事务?

java - 单元测试抛出默认管理员用户名不可用错误

mysql - 在 2 个表中选择匹配的字符串