0

I am trying to update a BLOB column in my database as follows using Session.doWork() in hibernate:

PreparedStatement pStmt = null;
ResultSet rs = null;
  try {
    String sql = 
      " SELECT " + "ITEM_IMAGE" + 
      " FROM " + "ITEM_IMAGES" + 
      " WHERE " + "ITEM_CODE" + " = ? " +
      " FOR UPDATE";
    pStmt = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);
    pStmt.setString(1, fileDesign.getItem_code());
    rs = pStmt.executeQuery();
    if (rs.next()) {
      Blob blob = rs.getBlob("ITEM_IMAGE");
      blob.truncate(0);
      blob.setBytes(1, fileDesign.getFile()); //here getFile() returns byte[] and causes exception here
      rs.updateBlob("ITEM_IMAGE", blob);
      rs.updateRow();
    }
  }
  finally {
    if(rs != null) rs.close();
    if(pStmt != null) pStmt.close();
  }

Above code works just fine in my local system but produces following exception in production enviroment:

org.hibernate.exception.GenericJDBCException: error executing work
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
    at org.hibernate.impl.SessionImpl.doWork(SessionImpl.java:2001)
    at com.arex.cbs.dao.DesignMasterDaoImpl.saveDesignActionGifUpload(DesignMasterDaoImpl.java:432)
    at com.arex.cbs.service.DesignMasterManagerImpl.saveDesignActionGifUpload(DesignMasterManagerImpl.java:98)
    at com.arex.cbs.controller.DesignController.saveDesignActionGIF(DesignController.java:658)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:421)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:409)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:774)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2441)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2430)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: Io exception: Software caused connection abort: socket write error
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:257)
    at oracle.jdbc.driver.T4CConnection.putBytes(T4CConnection.java:2037)
    at oracle.sql.BLOB.setBytes(BLOB.java:742)
    at com.arex.cbs.dao.DesignMasterDaoImpl$3.execute(DesignMasterDaoImpl.java:450)
    at org.hibernate.impl.SessionImpl.doWork(SessionImpl.java:1997)
    ... 36 more

Been stuck on it for days now : What could be going wrong here?

Darshan Lila
  • 5,772
  • 2
  • 24
  • 34
  • How big is that blob? Did you check the Oracle server's error log? – Aaron Digulla Dec 19 '14 at 09:11
  • Blobs can be of any size, but the thing is it works perfectly on my local system, but would result into exception in production. In each case I use same database. – Darshan Lila Dec 19 '14 at 09:16
  • With recent updates in my code now its giving me connection closed exception. The change that I've made in my code is that I've removed JDBC and would use hibernate to update BLOB data. – Darshan Lila Dec 19 '14 at 09:20
  • @DarshanLila Hibernate uses JDBC, so you haven't removed JDBC, you added a new layer. – Mark Rotteveel Dec 19 '14 at 11:45
  • Yes it uses JDBC internally but. But I used to use JDBC directly, but now I am using Hibernate. – Darshan Lila Dec 21 '14 at 12:26

0 Answers0