java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBlob(ILjava/io/InputStream;)V
15,614
Solution 1
You should use mysql-connector-java-5.1.7-bin.jar
to make this work.
Solution 2
As stated by giorgiga in this post its your JDBC driver's version. Either update it or use the older version of setBlob.
Edit: Taken from giorgiga's answer just in case link dies.
AbstractMethodError means your JDBC driver's PreparedStatements don't implement setBlob(int, InputStream, long).
Use the older setBlob(int, Blob) or update your driver (Connector/J 5.1 implements Jdbc 4.0, which should be what you need for setBlob(int, InputStream, long))
Author by
user2137186
Updated on June 05, 2022Comments
-
user2137186 almost 2 years
I am trying to save an uploaded file in MySQL database as follows:
String firstName = request.getParameter("firstName"); String lastName = request.getParameter("lastName"); InputStream inputStream = null; // input stream of the upload file // obtains the upload file part in this multipart request Part filePart = request.getPart("photo"); if (filePart != null) { // prints out some information for debugging System.out.println(filePart.getName()); System.out.println(filePart.getSize()); System.out.println(filePart.getContentType()); // obtains input stream of the upload file inputStream = filePart.getInputStream(); } Connection conn = null; // connection to the database String message = null; // message will be sent back to client try { // connects to the database DriverManager.registerDriver(new com.mysql.jdbc.Driver()); conn = DriverManager.getConnection(dbURL, dbUser, dbPass); // constructs SQL statement String sql = "INSERT INTO image(image,firstName, lastName) values (?, ?, ?)"; PreparedStatement statement = conn.prepareStatement(sql); if (inputStream != null) { // fetches input stream of the upload file for the blob column statement.setBlob(1, inputStream); } statement.setString(2, firstName); statement.setString(3, lastName); // sends the statement to the database server int row = statement.executeUpdate(); if (row > 0) { message = "File uploaded and saved into database"; } } catch (SQLException ex) { message = "ERROR: " + ex.getMessage(); ex.printStackTrace(); } finally { if (conn != null) { // closes the database connection try { conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } } // sets the message in request scope request.setAttribute("Message", message); // forwards to the message page getServletContext().getRequestDispatcher("/Message.jsp").forward(request, response); }
When i run this i get an error which is:
javax.servlet.ServletException: Servlet execution threw an exception root cause java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBlob(ILjava/io/InputStream;)V UploadServlet.doPost(UploadServlet.java:64) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
what could be the reason of this error ?input field names are firstName,lastName and photo
-
user2137186 about 11 yearswhats the older version of setBlob?
-
user2137186 about 11 yearsthis is the older version i guess