gpt4 book ai didi

spring - java.sql.SQLException : operation not allowed: streams type cannot be used in batching while inserting data into Oracle clob data type

转载 作者:IT老高 更新时间:2023-10-28 13:46:00 25 4
gpt4 key购买 nike

我正在使用 Hibernate Tools 3.2.1.GA 和 Spring 版本 3.0.2。我想将数据插入到 clob 类型的 Oracle (10g) 数据库字段中如下。

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

它工作得很好,但是当我尝试使用 CKEditor 插入数据流时, demo在我的 JSP 页面(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 Controller 类中,我使用以下代码在 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 modelsubmit() 的形式参数在 JSP 页面上单击提交按钮时调用的 Spring Controller 类中的方法。


我正在使用 Spring Controller 类中的以下简单方法检索数据

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但无济于事(我面临与该问题中指定的相同的异常(exception)情况)。

最佳答案

问题中提到的抛出异常是由于旧版本的 Oracle 驱动程序似乎不适用于 Oracle clob 数据类型。我使用的是 Oracle JDBC 驱动程序版本 - 9.0.2.0.0。我从 here 下载了一个新版本这是 Oracle JDBC Driver version - 10.2.0.5.0 在所有情况下都适用于我的应用程序。

在互联网的某个地方,有人说如果 CKEditor 保存的数据在插入 Oracle clob 数据类型时被转换(编码)为 base64,则该方法将在不更新驱动程序的情况下工作(意味着旧版本的 Oracle 驱动程序)(这显然需要在从数据库中检索数据时从 base64 解码)。

但我确实没有将其付诸实践,因为我下载的新版本的驱动程序对我来说运行良好。所以,我不确定后面的方法,我把它留给读者。

关于spring - java.sql.SQLException : operation not allowed: streams type cannot be used in batching while inserting data into Oracle clob data type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075253/

25 4 0