Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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

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
Java 使用Hibernate在数据库中存储Blob_Java_Hibernate_Oracle10g - Fatal编程技术网

Java 使用Hibernate在数据库中存储Blob

Java 使用Hibernate在数据库中存储Blob,java,hibernate,oracle10g,Java,Hibernate,Oracle10g,我需要您的帮助,使用hibernate将Blob存储到Oracle 10g DB中。 我正在试验,并试图将Blob存储在DB(oracle10g)中 为此,我制作了一个简单的程序,它使用java.sql.Blob类型存储在数据库中。 运行TestBlobStore程序时出现的错误是: Hibernate: insert into SIMPLE_BEANS (DATA, SIMPLE_BEAN_ID) values (?, ?) Exception in thread "main" java.la

我需要您的帮助,使用hibernate将Blob存储到Oracle 10g DB中。 我正在试验,并试图将Blob存储在DB(oracle10g)中

为此,我制作了一个简单的程序,它使用java.sql.Blob类型存储在数据库中。 运行TestBlobStore程序时出现的错误是:

Hibernate: insert into SIMPLE_BEANS (DATA, SIMPLE_BEAN_ID) values (?, ?)
Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.T4CPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
    at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$5$1.doBind(BlobTypeDescriptor.java:151)
    at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$2$1.doBind(BlobTypeDescriptor.java:107)
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:90)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:286)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:281)
    at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:56)
    at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2843)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3121)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3581)
    at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:104)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349)
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
    at blobStore.test.TestBlobStore.main(TestBlobStore.java:45)
我的豆豆是:

SimpleBean
{
private Long id;
private Blob data;
//getter and Setters
}
我的TestBlobInsertDemo文件是:

public class TestBlobStore {

    public static void main(String[] args) throws IOException {

        Configuration cfg = new Configuration();
        cfg.configure();
        ServiceRegistry serRegObj = new StandardServiceRegistryBuilder()
                .applySettings(cfg.getProperties()).build();
        SessionFactory sessionFactory = cfg.buildSessionFactory(serRegObj);
        Session session = sessionFactory.openSession();

        session.beginTransaction();

        File dataFile = new File("xmlFile/test.xml");
        long dataSize = dataFile.length();
        InputStream dataStream = new FileInputStream(dataFile);

        LobHelper lobHelper = session.getLobHelper();
        Blob dataBlob = lobHelper.createBlob(dataStream, dataSize);

        SimpleBean myBean = new SimpleBean();
        myBean.setId(1L);
        myBean.setData(dataBlob);

        session.save(myBean);
        System.out.println("bean inserted");
        session.getTransaction().commit(); // Throws java.lang.OutOfMemoryError
        session.close();
        System.out.println("File Saved");
        // blobStream.close();
        sessionFactory.close();
    }

}
我的映射文件如下所示:

<hibernate-mapping>
<class name="blobStore.bean.SimpleBean" table="SIMPLE_BEANS">
    <id name="id" type="int" column="SIMPLE_BEAN_ID" />
    <property name="data" type="blob" column="DATA" />
</class>
</hibernate-mapping>

我知道,如何使用Bytearray存储Blob,并且已经成功地学习了它,我想知道如何使用java.sql.Blob

请帮我学这个。 我已经在谷歌上搜索过了,几乎所有的都是用bytearray的。 我打算采用存储java.sql.Blob的方法来简化代码


感谢您的帮助。

对于JDBC,通常会出现这种错误,因为您的JDBC驱动程序实现的JDBC API版本比JRE中包含的版本旧。只要您不尝试使用新API中出现的方法,这些旧版本就可以了。可能对你有帮助。有同样的问题,这是驱动程序异常。尝试另一个版本。我正在使用OJDBC14.jar,这是最新的版本。