I am trying to write student registeration project in which student tabel and course tabel have many to many relationship.I've managed to put String and Int date into the table however i cant seem to put the blob data into my student table. my current error is showing imageData in AddStudentServlet is null.
this is my addstudent.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!DOCTYPE html><html><head><meta charset="ISO-8859-1"><title>Insert title here</title></head><body><form action="<%= request.getContextPath() %>/addstudents" method="post" enctype="multipart/form-data"><div><label>Student Name</label><input type="text" name="name"></div><div><label>Email</label><input type="text" name="email"></div><div><label>Date Of Birth</label><input type="text" name="DOB"></div><div><label>Gender</label><input type="text" name="gender"></div><div><label>Phone Number</label><input type="number" name="phno"></div><div><label>Education</label><input type="text" name="education"></div><label >Product Image</label><input type="file" name="imageData" required="required" ></input><div><label>Attending Course</label><select name="courses" multiple><c:forEach var="course" items="${courses}"><option value="${course.id}">${course.cname}</option></c:forEach></select></div><div><input type="submit" value="add student" class=""></div></form></body></html>
and this my StudentRequestDTO
package student_registration.persistant.DTO;import java.util.List;public class StudentRequestDTO { private int id; private String name; private String email; private String DOB; private String gender; private String phno; private String education; private byte[] imageData; private List<CourseRequestDTO> courses; private List<String> course_id; public StudentRequestDTO() {} public byte[] getImageData() { return imageData; } public void setImageData(byte[] imageData) { this.imageData = imageData; } public List<CourseRequestDTO> getCourses() { return courses; } public void setCourses(List<CourseRequestDTO> courses) { this.courses = courses; } public List<String> getCourse_id() { return course_id; } public void setCourse_id(List<String> course_id) { this.course_id = course_id; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getDOB() { return DOB; } public void setDOB(String dOB) { DOB = dOB; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getPhno() { return phno; } public void setPhno(String phno) { this.phno = phno; } public String getEducation() { return education; } public void setEducation(String education) { this.education = education; }}
this is my addstudentservlet
package student_registration.controllers;import java.io.IOException;import java.nio.charset.StandardCharsets;import java.util.Arrays;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import student_registration.persistant.DAO.CourseDAO;import student_registration.persistant.DAO.StudentDAO;import student_registration.persistant.DTO.CourseResponseDTO;import student_registration.persistant.DTO.StudentRequestDTO;/** * Servlet implementation class AddStuddentServlet */@WebServlet("/addstudents")@MultipartConfigpublic class AddStuddentServlet extends HttpServlet { private static final long serialVersionUID = 1L; StudentDAO dao=new StudentDAO(); CourseDAO cdao=new CourseDAO(); public AddStuddentServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<CourseResponseDTO> courses=cdao.getAllCourses(); request.setAttribute("courses",courses); request.getRequestDispatcher("addstudent.jsp").forward(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] course_ids=request.getParameterValues("courses"); String name=request.getParameter("name"); String email=request.getParameter("email"); String DOB=request.getParameter("DOB"); String gender=request.getParameter("gender"); String phno=request.getParameter("phno"); String education=request.getParameter("education"); String imageDataString=request.getParameter("imageData"); System.out.println(imageDataString); byte[] imageData=imageDataString.getBytes(StandardCharsets.UTF_8);// Part filePart = request.getPart("imageData");// InputStream inputStream=filePart.getInputStream(); StudentRequestDTO student=new StudentRequestDTO(); student.setName(name); student.setEmail(email); student.setDOB(DOB); student.setGender(gender); student.setPhno(phno); student.setEducation(education); student.setCourse_id(Arrays.asList(course_ids)); student.setImageData(imageData); try{ dao.addStudent(student); }catch(Exception e) { System.out.println("ERRORRRR"); e.printStackTrace(); } response.sendRedirect("displaystudent"); }}
and this is my code for adding data in studentDAO
public int addStudent(StudentRequestDTO student) { int result= 0; String sql= "INSERT INTO student(name,email,DOB,gender,phno,education,imageData) VALUES(?,?,?,?,?,?,?)"; try { PreparedStatement ps=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); ps.setString(1, student.getName()); ps.setString(2, student.getEmail()); ps.setString(3, student.getDOB()); ps.setString(4, student.getGender()); ps.setString(5, student.getPhno()); ps.setString(6, student.getEducation()); Blob blob =new javax.sql.rowset.serial.SerialBlob(student.getImageData()); ps.setBlob(7, blob); result=ps.executeUpdate(); ResultSet generatedKeys = ps.getGeneratedKeys(); int studentId = 0; if (generatedKeys.next()) { studentId = generatedKeys.getInt(1); } if(result!=0) { for(String course_id:student.getCourse_id()) { sql="INSERT INTO student_has_course(student_id,course_id) VALUES(?,?)"; PreparedStatement psCourse=con.prepareStatement(sql); psCourse=con.prepareStatement(sql); psCourse.setInt(1, studentId); int id=Integer.parseInt(course_id); psCourse.setInt(2, id); result=psCourse.executeUpdate(); } } } catch (SQLException e) { System.out.print("Insert error!!! "+ e); } return result; }
i dont know what to try nor how to work with image data and my goal is to add the image as blob into the database. How do get image data from jsp and deliver the code correctly