11

I'm using Hibernate Tools 3.2.1.GA with Spring version 3.0.2. I'm tying to insert data into Oracle (10g) database field of type clob as follows.

Clob c=Hibernate.createClob(request.getParameter("someTextFieldValueOnJSPPage");
pojoObj.setSomeClobProperty(c);

it works just fine but when I attempt to insert a stream of data using a CKEditor, demo on my JSP page (the CKEditor simply renders an HTML <textarea></textarea> element) that may involve formatted text as well as images, flash etc, it throws the following exception.

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: could not update: [model.Cms#1]

org.hibernate.exception.GenericJDBCException: could not update: [model.Cms#1]

java.sql.SQLException: operation not allowed: streams type cannot be used in batching

How to resolve that exception? Is this the Oracle driver problem or something else? I'm using ojdbc14.jar, Oracle JDBC Driver version - 9.0.2.0.0.


UPDATE:

One of the entities that uses the Clob type is

public class Cms  implements java.io.Serializable
{
     private BigDecimal cmsId;
     private Clob aboutUs;     //I'm currently dealing with this property.
     private Clob contactUs;
     private Clob privacyPolicy;
     private Clob returnPolicy;
     private Clob shippingPolicy;
     private Clob termsOfUse;
     private Clob exchangeLinks;
     private Clob disclaimer;
     private Clob aboutProducts;
     private Clob purchasingConditions;
     private Clob faq;

    //Parameterized constructor(s) along with the default one as and when needed.

    //Getters and setters.
}

In my Spring controller class, I'm using the following code to perform insertion on the Clob type in Oracle.

Cms c=new Cms();
c.setCmsId(new BigDecimal(0));
c.setAboutUs(Hibernate.createClob(request.getParameter("txtAboutUs")));
session.save(c);
session.flush();
session.getTransaction().commit();
model.put("status", "1");
model.put("msg","Insertion done successfully.");
//setParameter(cb);

Where model is simply a Map model, a formal parameter of the submit() method in the Spring controller class which is invoked when a submit button is clicked on the JSP page.


I'm retrieving data using the following simple method in the Spring controller class

private void getData(Map model)
{
    Session session=NewHibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    List<Cms>list=session.createQuery("from Cms order by cmsId desc").list();
    model.put("list", list);

    session.flush();
    session.getTransaction().commit();
}

Tried to do as mentioned here but to no avail (I'm facing the same exceptions as specified in that question).

9
  • It was indeed the Oracle driver problem. I was using Oracle JDBC Driver version - 9.0.2.0.0. I have just downloaded a new version from here which is Oracle JDBC Driver version - 10.2.0.5.0 which works just fine in all the situations. Commented Aug 29, 2012 at 20:17
  • 6
    You should post that as the answer and mark it. Commented Sep 4, 2012 at 5:12
  • 4
    @Tiny Answer your own question and then mark it as an answer. Thank You. Commented Sep 4, 2012 at 7:07
  • Well, I think the first comment of mine is sufficient to answer this question and therefore, I don't feel like answering this question by myself. It looks like cheating to me. If someone has more details on this question and post it as an answer then I will consider marking it as an accepted answer with one upvote I can do. Thank you. Commented Oct 26, 2012 at 22:24
  • 3
    @Tiny I m impressed by your honesty and your thought process. Keep up the good work. Age does not matter as long as you have the skill, that is the beauty of software development :-). By the way you seem to be much more mature then your age :-). Commented Nov 5, 2012 at 12:11

1 Answer 1

18

The exception being thrown as mentioned in the question was owing to the fact that the older version of the Oracle drivers might not seem to work with the Oracle clob datatype. I was using Oracle JDBC Driver version - 9.0.2.0.0. I downloaded a new version from here which is Oracle JDBC Driver version - 10.2.0.5.0 which works just fine for my application in all the situations.

Somewhere on the internet, it was stated by someone that if the data held by a CKEditor is converted (encoded) to base64 while inserting into the Oracle clob datatype, the approach is going to work without updating the driver (means with the older version of the Oracle drivers) (which is as obvious requires to decode from base64 while retrieving the data from the database).

but I indeed didn't put it into practice as the new version of the driver I downloaded is working fine for me. So, I'm not sure about the later approach and I'm leaving it to the readers.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.