sql >> Database teknologi >  >> RDS >> Oracle

Sådan fortsætter du med STORE BLOB'er (>100MB) i Oracle ved hjælp af Hibernate

Jeg havde de samme problemer som dig med at forsøge at kortlægge ved hjælp af "blob"-typen. Her er et link til et indlæg, jeg lavede på dvalestedet:https://forum.hibernate.org/viewtopic.php?p=2452481#p2452481

Hibernate 3.6.9
Oracle Driver 11.2.0.2.0
Oracle Database 11.2.0.2.0

For at løse problemet brugte jeg kode, der havde en brugerdefineret UserType til Blob, jeg havde returtypen java.sql.Blob.

Her er de vigtigste metodeimplementeringer af denne UserType:

public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {

   Blob blob = rs.getBlob(names[0]);
   if (blob == null)
      return null;

   return blob;
}

public void nullSafeSet(PreparedStatement st, Object value, int index)
     throws HibernateException, SQLException {
   if (value == null) {
      st.setNull(index, sqlTypes()[0]);
   }
   else {
      InputStream in = null;
      OutputStream out = null;
      // oracle.sql.BLOB
      BLOB tempBlob = BLOB.createTemporary(st.getConnection(), true, BLOB.DURATION_SESSION);
      tempBlob.open(BLOB.MODE_READWRITE);
      out = tempBlob.getBinaryOutputStream();
      Blob valueAsBlob = (Blob) value;
      in = valueAsBlob.getBinaryStream();
      StreamUtil.toOutput(in, out);
      out.flush();
      StreamUtil.close(out);
      tempBlob.close();
      st.setBlob(index, tempBlob);
      StreamUtil.close(in);
   }
}


  1. Inden for en triggerfunktion, hvordan man får hvilke felter der opdateres

  2. Konverter 'datetime2' til 'datetime offset' i SQL Server (T-SQL-eksempler)

  3. Åbner Android Sqlite-databasen i fragment

  4. 4 måder at ændre tidszonen i Oracle