我正在使用Hibernate Tools 3.2.1.GA和Spring 3.0.2版。我想将数据插入到clob
类型的Oracle(10g)数据库字段中,如下所示。
Clob c=Hibernate.createClob(request.getParameter("someTextFieldValueOnJSPPage");
pojoObj.setSomeClobProperty(c);
它工作得很好,但当我尝试在我的JSP页面上使用CKEditor,demo插入数据流时(CKEditor只是呈现HTML <textarea></textarea>
元素)涉及格式化文本以及图像,flash等,它会引发以下异常。
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
如何解决该异常?这是Oracle driver problem还是其他什么?我正在使用ojdbc14.jar
,Oracle JDBC Driver version - 9.0.2.0.0
。
更新
使用Clob
类型的实体之一是
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.
}
在我的Spring控制器类中,我使用以下代码在Oracle中的Clob
类型上执行插入。
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);
其中model
只是Map model
,是Spring控制器类中submit()
方法的形式参数,在JSP页面上单击提交按钮时会调用该参数。
我正在Spring控制器类
中使用以下简单方法检索数据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();
}
试图像上面提到的here那样做但无济于事(我面临与该问题中指定的相同的例外情况)。
答案 0 :(得分:18)
问题中提到的抛出的异常是由于旧版本的Oracle驱动程序似乎无法与Oracle clob数据类型一起使用。我正在使用Oracle JDBC Driver version - 9.0.2.0.0
。我从here下载了一个新版本Oracle JDBC Driver version - 10.2.0.5.0
,在所有情况下都可以正常使用我的应用程序。
在互联网上的某个地方,有人说如果CKEditor持有的数据在插入Oracle clob数据类型时被转换(编码)为base64,那么该方法将在不更新驱动程序的情况下工作(具有旧版本的Oracle驱动程序)(显然需要在从数据库中检索数据时从base64解码)。
但我确实没有付诸实践,因为我下载的驱动程序的新版本对我来说很好。所以,我不确定后来的方法,我将它留给读者。