ファイルをOracleインスタンスに保存します。私はデータオブジェクトのためにHibernateを使用しています。 Oracle Blobにファイルを挿入する方法このためのサンプルコードはありますか?Hibernate上でBLOB列タイプを使用してOracleにファイルを挿入したいのですか?
答えて
まず、エンティティフィールドに@ javax.persistance.Lobアノテーションを注釈する必要があります。このよう :
public class InfoMessage {
private byte[] body;
@Lob
public byte[] getBody() {
return body;
}
public void setBody(byte[] body) {
this.body = body;
}
}
とバイト配列とそれを設定します。それはあなたが使用するファイルクラスに依存します。 java.io.Fileの最初のGoogle検索結果。私はこの操作のためのよりよい解決策があると思います。
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
// Get the size of the file
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
}
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
// Close the input stream and return bytes
is.close();
return bytes;
}
答えVangerに感謝します。注釈ではなくhibernateのxml構成を使用しています。 – firstthumb
@Vanger 3GBファイルをOracleに保存できますか?このコードでは整数とバイト配列の長さを使用しているので、整数の最大値にすることができますこれは3GB未満のファイルです。私が間違っている? – firstthumb
@Lob
注釈は、Hibernateのものではありません。それはjavax.persistence
で、エンティティBeanで任意のハイバネートマッピングを使用して使用できます。 はい、そのような例では、大きなファイルが明らかな問題です。しかし、私はこの場合の回避策を見つけることができません。 FileInputStream
int型の値を使用してオフセットポイントを表します。 私は同様の問題でこれを試してみました:http://www.coderanch.com/t/449055/Streams/java/JAVA-HEAP-SIZE-files-byte Java 1.6を使用している場合は、SQLPrepareSteatement
のソリューションを使用できます。他にもBufferedReader
を使用して、結果をbyteArray[]
に変換して別の問題を解決しようとすると、ファイルサイズと同じくらい多くのメモリが必要になります。
EDITED:もう一つ:Oracleが、それはあなたがメモリ内のすべてのファイルを避けることができるようにdbms_lob.writeappend()プロシージャを使用してCLOB \ブロブフィールドをだにデータを追加することができますが、ファイルから読み込んBufferedReader
ほど速くきれいに行うGCます。そして、これを行うための休止状態の仕事ではないようです... jdbcとPreparedStatementsが再び戻ってきます。
+1明確な説明のため。ありがとう。私は私の答えを得た。 – firstthumb
- 1. C#を使用してOracleデータベースにBLOBを挿入してください
- 2. DB2とOracleの両方でjavaを使用してBLOBを挿入
- 3. javaを使用してtxtファイルからoracle DBに挿入
- 4. 大きなxmlファイルをblobとしてoracleテーブルに挿入します。
- 5. Spring/Hibernateを使用したバルク挿入
- 6. PHPでMDB2を使用してBLOBデータを挿入する
- 7. Hibernateを使用してMySQLからp:dataTableを挿入します
- 8. Hibernateを使用してテーブルにデータを挿入します。
- 9. Javaを使用して画像をcassandra blobに挿入
- 10. Hibernateアノテーションを使用しないでHibernateマッピングを使用してBlobをポストグルから読み取る
- 11. JAVAを使用してExcelからOracleデータベースにデータを挿入
- 12. OLE DBを使用したBLOBの挿入
- 13. Javaを使用してOracle DBに挿入します。
- 14. Spring、Hibernate、JPAを使用してテーブルにデータを挿入する
- 15. cx-Oracleを使用してUnicodeを挿入できません
- 16. awkを使用して入力ファイルに新しい列を挿入することはできますか?
- 17. C#を使用してDataTableからOracleにバルク挿入
- 18. hibernateマッピングを使用してデータベーステーブルにデータを挿入できない
- 19. Hibernate DAOメソッドを使用して外部キーを使用してテーブルに挿入
- 20. ファイルをmysqlに挿入するBlob
- 21. VB6を使用してファイルをOracle BLOBフィールドにアップロードするにはどうすればよいですか?
- 22. ODBCを使用してoracleにclobを挿入する
- 23. リモートマシンからlibpqを使用してPostgreSQLにバイナリラージオブジェクト(BLOB)を挿入する
- 24. jdbcTemplateを使用してOracleにファイルを挿入する方法は?
- 25. バルクsqlloader nodeJSを使用してOracle DBにCSVファイルを挿入する
- 26. ORACLE ColdFusionにリストを使用して複数の行を挿入しますか?
- 27. Javaを使用したストアドプロシージャによるOracle JDBCの挿入
- 28. Restrictions.sqlRestriction例外Oracleを使用したHibernate
- 29. Hibernateを使用したOracleオプティマイザヒント
- 30. jxl apiを使用して既存のExcelファイルに新しい列を挿入
これは本当に必要ですか?ファイルシステムのどこかにファイルを保存して、データベース内のパスを保存する方がはるかに優れています。ファイルシステムにファイル –
を提供させてください。Boris ..それは、holywarsテーマの1つで、データベース内のOLEオブジェクトを管理する方法です。私が本当に知っていることは、Oracleのロシアが自分のファイルをデータベースのLobオブジェクトとして管理していることです。あなたはそれに関するいくつかの話題を検索することができます。 – Vanger
@Boris:データベースにブロブを格納するのにも有効な理由があります。少なくとも、データベースによってすでに提供されているバックアップ、トランザクション、アクセス制御、およびネットワークアクセスの機能を活用することが最低限です。 – Thilo