- 締切済み
ORACLEにバイナリデータを格納するに適した項目の型は?
JAVAを使って、ORACLE8iを用いたWebを開発してます。 JAVAのByte型に格納したバイナリデータをORACLEに格納しようと思ったのですが、適した型が見つからず悩んでます。 BLOB型を検討したのですが、一定のサイズを超過するとレスポンスの問題が関係し、アクセス方法が別途必要する事がわかりました。 私的には、integer型のように扱ってデータをアクセスできたらと思います。(専用のインターフェースを使用しない) すみませんが、宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mi-si
- ベストアンサー率35% (200/567)
BLOB(Binary Large OBject)は、あくまでもオブジェクトデータ型ですので、手続きが少々煩雑になるのは仕方ないですね。 JDBC3.0の拡張であるsetBinaryStreamか、setBytes(JDK1.4以上)。かOracle JDBC Driverの拡張型であるoracle.sql.BLOB型のgetOutputBinaryStreamを使うのが常套手段でしょうか? 単にバイナリを扱うならRAW型(2000byte)、LONG RAW型(2GByte-1)がありますが、LONG RAWはテーブルに1つしか作れないなど制限ががありますし、データへのアクセスはシーケンシャルに持ってくるので必要なときだけデータにアクセスするBLOB型よりレスポンスはあんまり良くないと思います。
- iwashimizu
- ベストアンサー率30% (17/55)
確かにBLOBを利用するとアクセスが難しくなりますが、 バイナリデータはBLOBで格納する以外ないと思います。 共通関数的なものを自分で作成して、どのデータ型でも 同じようなアクセス方法で対応できるようにするのも ひとつの手だと思います。 また、OracleとJDBCのバージョンが共に8.1.6以上で あれば、setBinaryStream,setObject等で比較的 簡単にBLOBに書き込みできると思います。
- 参考URL:
- http://otn.oracle.co.jp
お礼
アドバイスありがとうございます。 やはり、アクセスは難しくなるのですね。 「共通関数…」なるほど。ネットで調べても、サンプルが少なかったので、あまり着たい出来ないのかなと思ってました。 「setBinaryStream,setObject」を中心に調査に入りたいと思います。 ありがとうございました。 又、何か気づいた点がありましたら、お願いします。
- YoshiakiKun
- ベストアンサー率29% (86/296)
バイナリデータをファイルで落とし、Oracle上ではファイル名を保持するようにした方が良いです。
お礼
早々の回答ありがとうございます。 ファイルにして、ファイル名を管理したほうがよいですよね。 できれば、DBに実体を格納したい…というのが希望なんです。
お礼
ありがとうございます。 integer型のような扱いをする事ができないのですね。バイナリをデータで扱うのは、結構制限があるのですね。 代用する型もあるのは、初めて知りました。でも、制約が…。 oracleだけでなく、JAVAのバージョンにもよるとなると、自分の環境を再度確認した方がよいですね。 ちなみに、J2EE1.3です。 また、参考・アドバイスがありましたら、お願いします。