Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring java.sql.SQLException:不允许操作:将数据插入Oracle clob数据类型时,不能在批处理中使用streams类型_Spring_Hibernate_Jsp_Oracle10g_Clob - Fatal编程技术网

Spring java.sql.SQLException:不允许操作:将数据插入Oracle clob数据类型时,不能在批处理中使用streams类型

Spring java.sql.SQLException:不允许操作:将数据插入Oracle clob数据类型时,不能在批处理中使用streams类型,spring,hibernate,jsp,oracle10g,clob,Spring,Hibernate,Jsp,Oracle10g,Clob,我正在使用Hibernate工具3.2.1.GA和Spring版本3.0.2。我打算在Oracle(10g)数据库字段中插入clob类型的数据,如下所示 Clob c=Hibernate.createClob(request.getParameter("someTextFieldValueOnJSPPage"); pojoObj.setSomeClobProperty(c); 它工作得很好,但是当我尝试在我的JSP页面上使用插入数据流时(CKEditor只是呈现一个HTML元素),可能涉及格式

我正在使用Hibernate工具3.2.1.GA和Spring版本3.0.2。我打算在Oracle(10g)数据库字段中插入
clob
类型的数据,如下所示

Clob c=Hibernate.createClob(request.getParameter("someTextFieldValueOnJSPPage");
pojoObj.setSomeClobProperty(c);
它工作得很好,但是当我尝试在我的JSP页面上使用插入数据流时(CKEditor只是呈现一个HTML
元素),可能涉及格式化文本以及图像、flash等,它抛出以下异常

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


如何解决该异常?是这个还是别的什么?我使用的是
ojdbc14.jar
oraclejdbc驱动程序版本-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模型
,是Spring控制器类中的
submit()
方法的一个形式参数,当在JSP页面上单击submit按钮时调用该参数


我在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();
}
private void getData(地图模型)
{
会话会话=NewHibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Listlist=session.createQuery(“根据cmsId desc从Cms订单”).list();
模型。放置(“列表”,列表);
session.flush();
session.getTransaction().commit();
}

尝试按上述操作,但没有效果(我面临的异常与该问题中指定的相同)。

问题中提到的引发异常的原因是,较旧版本的Oracle驱动程序似乎无法与Oracle clob数据类型一起工作。我使用的是Oracle JDBC驱动程序版本-9.0.2.0.0。我从中下载了一个新版本,即Oracle JDBC驱动程序版本-10.2.0.5.0,它在所有情况下都适用于我的应用程序

在互联网上的某个地方,有人指出,如果在插入Oracle clob数据类型时将CKEditor持有的数据转换(编码)为base64,则该方法将在不更新驱动程序的情况下工作(意味着使用较旧版本的Oracle驱动程序)(很明显,从数据库检索数据时需要从base64解码)


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

这确实是Oracle驱动程序的问题。我使用的是
Oracle JDBC驱动程序版本-9.0.2.0
。我刚刚下载了一个新版本,它可以是
Oracle JDBC驱动程序版本-10.2.0.5.0
,在所有情况下都能正常工作。你应该将其作为答案并标记。@Tiny回答你自己的问题,然后将其标记为答案。谢谢。我想我的第一条评论就足以回答这个问题,因此,我不想回答这个问题对我来说,这看起来像是作弊。如果有人对这个问题有更多的细节,然后把它作为一个答案,那么我会把它标记为一个可以接受的答案,我可以做一个投票。谢谢你。我对你的诚实和思维过程印象深刻。保持良好的工作。年龄不重要,只要你有这个技能,那就是。软件开发之美:-)。顺便说一句,你似乎比你的年龄成熟多了:-)。
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);
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();
}