Java 使用Hibernate在数据库中存储Blob
我需要您的帮助,使用hibernate将Blob存储到Oracle 10g DB中。 我正在试验,并试图将Blob存储在DB(oracle10g)中 为此,我制作了一个简单的程序,它使用java.sql.Blob类型存储在数据库中。 运行TestBlobStore程序时出现的错误是: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: 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,这是最新的版本。