Feb 04

Depending on your jdbc driver version the following code can fail to run.

File file = new File("image.jpg");
InputStream in = new FileInputStream(file);
preparedStatment.setBinaryStream(1, in, file.length());

The error you will see is as follows.

java.lang.AbstractMethodError: com.mysql.jdbc.ServerPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V

To fix this problem you need to change the call to setBinaryStream so the last parameter is passed as an integer instead of a long.

File file = new File("image.jpg");
InputStream in = new FileInputStream(file);
preparedStatment.setBinaryStream(1, in, (int) file.length());

written by objects \\ tags: , , ,


11 Responses to “Getting AbstractMethodError when calling setBinaryStream”

  1. AndrΓ© Says:

    Took me half a day to find your post and solve the problem.

    I did see this under tomcat connection pooling:

    java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V

    But the cause was the same.

    Thanks.

  2. objects Says:

    Glad it helped you.

  3. anyhow Says:

    that works!
    I also get the same type of exception from the connection pool:

    java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V

    at first i use:preparedStatment.setBinaryStream(1, inputStream);
    then i change that into:preparedStatment.setBinaryStream(1, in, 1000000);

    for i don’t know how to get the size of the stream conveniently,i use 1000000 instead.

  4. Kishor Kumar Says:

    Thankyou
    Your tip works. Thankyou very much.

  5. mayiqun Says:

    thank you , help much

  6. luis55_2 Says:

    Gracias me sirvio de mucho y pensar que solo era un simple casteo….

  7. Srikanth Says:

    Thank you very much. I wasted almost 3 hours trying to figure out the issue

  8. Paolo Finamore Says:

    It Works! Thanks a lot ^_^ …

    I tried with an inputstream from an excel workbook (instead a file, created with Apache POI), and i don’t know the size of the document and get this error. I have saved the document in file and then create the inputStream from this file.

    It works!

    You think there is an alternative way to determine the size of a generic stream?

    thanks in advance πŸ˜‰

  9. objects Says:

    Only way to find the length of a generic stream is to read it (until eof)

    In your case can’t you get the size of the source excel workbook?

  10. Takidoso Says:

    Is there any way to have a real streaming, so not anything would be in memory?

  11. VAISAKH Says:

    Boss you saved my big time thank youuuuuuuuuuuuu

Leave a Reply

You must be logged in to post a comment.