2012-06-22 3 views
3

내 Informix 데이터베이스에 바이트 배열을 저장하는 문제는, 내가 노력하고있어 방법을 보여 드리죠가 :이있는 다른 것들 사이 Fichero.java에서최대 절전 모드 + 인포믹스 + 물방울 + 바이트 배열

:

@Column(name="fichero", columnDefinition="blob") 
private byte[] contenido; 

은 내가 인포믹스 + Hibernate는 @Lob 주석을 받아들이는 얻을 수 없기 때문에 그런 식으로해야했다 (예, 나는 노력이 Hibernate의 방언 해결 방법을 확장하지만 나를 위해 작동하지 않습니다) 그리고

을 파일을 읽고이 방법으로 bytearray로 변환하십시오. FileManage FicheroDAO.java

public void save(Object object) { 
    getHibernateTemplate().save(object);  
} 

를 객체 내 Fichero 개체입니다 : r.java

private byte[] fromFile2ByteArray(String nombreFichero) throws FileNotFoundException, IOException{ 
    File file = new File(nombreFichero); 
    InputStream is = new FileInputStream(file); 
    byte[] contenido = new byte[(int)file.length()]; 
    is.read(contenido); 
    is.close(); 
    return contenido; 
} 

그리고 다음은 내가 사용하여 내 데이터베이스에 저장하려고합니다.

부유 ュ 우트, 다음과 같은 예외가 있습니다.

Hibernate: 
    /* insert es.cosas.modelo.datos.dominio.fichero.Fichero 
     */ insert 
     into 
      cosas_fichero 
      (fichero, idEnvio, nombrefichero, respuesta) 
     values 
      (?, ?, ?, ?) 
WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: -841, SQLState: S0000 
ERROR: org.hibernate.util.JDBCExceptionReporter - Name must start with a letter or '_' and contain letters, digits, or '_'. 
22-jun-2012 9:25:32 org.apache.catalina.core.StandardWrapperValve invoke 
GRAVE: Servlet.service() para servlet Spring MVC Dispatcher Servlet lanzó excepción 
java.sql.SQLException: Name must start with a letter or '_' and contain letters, digits, or '_'. 
    at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:379) 
    at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:3109) 
    at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3419) 
    at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2282) 
    at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2202) 
    at com.informix.jdbc.IfxSqli.executeFastPath(IfxSqli.java:5475) 
    at com.informix.jdbc.IfxSqli.executeFastPath(IfxSqli.java:5400) 
    at com.informix.jdbc.IfxSmartBlob.IfxLoColInfo(IfxSmartBlob.java:306) 
    at com.informix.jdbc.IfxSmBlob.createSmartLob(IfxSmBlob.java:751) 
    at com.informix.jdbc.IfxSmBlob.createBlobOnServer(IfxSmBlob.java:497) 
    at com.informix.jdbc.IfxResultSet.executeUpdate(IfxResultSet.java:301) 
    at com.informix.jdbc.IfxStatement.executeUpdateImpl(IfxStatement.java:885) 
    at com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedStatement.java:279) 
    at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) 
    at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) 
    at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:57) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2329) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2836) 
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) 
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:267) 
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321) 
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) 
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) 
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:705) 
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:693) 
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:689) 
    at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:686) 
    at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:1) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
    at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:683) 

FicheroDAO.java 파일과 개체를 저장하려고 회선 번호 예외 지점에서 다음 줄 ...

어떤 아이디어가?

+0

그럼 난 다시 시도 그것은 @ 로브를 받아 들일 수 있지만 저장시 똑같은 예외가 발생합니다 ... – diminuta

+0

부수적으로 : DB에서 바이트 [] fichero 속성과 해당 열을 삭제하면 저장에 문제가 없으므로 뭔가 있어야합니다 바이트 []에서 BLOB 또는 Hibernate에서 쿼리를 만드는 방식으로 변환하면 ... – diminuta

+0

결국 좀 더 간단한 해결 방법을 찾았습니다. DB에있는 열을 바이트로 정의했습니다 ... 매력 ... 어쨌든 고스트 .. – diminuta

답변

1

그럼 결국 내가 더 간단한 해결 방법을 알아 냈 : 난 그냥 ... 바이트로 DB에 열을 정의하고 어쨌든 고맙습니다 ... 마법처럼 작동합니다 ..