a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 269|回复: 2

[考试辅导] Oracle技术:Oracle中Blob字段的写入处理介绍

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
Oracle中的Bloc字段的措置较其他字段来说,会有一些非凡性。现就对在java和pl/sql下,Blob字段的措置和巨匠做一些交流。   下面,简单介绍一下Blob在以下两种情形中的写入措置,
4 y" }4 b) G2 F1 [! t# C; m  u      java情形
- b- \& z# U( X( p6 L3 K  u      PL/SQL情形
  t* U; w7 s7 E! K) F  y  一、java情形
2 j0 i* g" G& H9 |; F- x8 U+ A: v1 p  1、 Blob的插入操作/ t1 {3 v. [# z& y
  1)       插入一空的Blob。9 d& }( ^# J! h. s
  2)       更新该记载的Blob。" y# Q- T6 C* e8 R+ E
  例子:, e0 n# N6 x3 x! Z( C& S
  好比表结构如下:
4 t- ~' r9 J/ N4 [; N# |  CREATE TABLE Student (
0 |$ B5 b/ f: f" M! t+ i  Name VARCHAR2(30),
: e, O5 I  w* c: N; o  Age   Int,5 @% a8 m6 F8 P' G7 _
  Picture    Blob);7 T. j" R1 U# `
  i.插入一空的Blob。
+ `6 M7 [  s8 _3 }7 n# U. a! V  String command=”INSERT INTO Student VALUES(?,?,?)”;! U8 a6 _. B, e" @5 P: L
  Connection conn=null;& O% e" x, d+ _& H- S/ @
  PreparedStatement ps=null;' {; Z8 ?3 M: a
  try
0 {9 W4 p7 z" Q! e  {, Q8 n5 E; W  [6 i
  conn=….;5 q% B3 Y6 y7 ?7 A! G
  ps=conn. prepareStatement(command);
; I& i' Z( L; G' U$ E  ps.setString(1,”ZhangSan”);7 H/ O8 p1 ~9 L: \4 d4 u
  ps.setInt(2,20);0 Z/ m- `! y) w" y) T5 ~
  ps.setBlob(3, BLOB.empty_lob());. e2 {7 U6 p. B- N
  ps.executeUpdate();
6 n. Y7 o- ~3 w4 X" X  …; Q8 w8 z, q3 _, G; Q4 C; N
  ii.更新该记载: S/ t( o! a, I, ^* `1 Q: [
  …3 m1 V6 w. k" w/ O
  byte[] data=null;
# h3 }2 q% V  d9 A  Connection conn=null;
2 u  ]2 T% F9 A  Try
0 a, P9 J1 o# E) i: k: ~% j6 f0 D  {7 T1 i% E, e" L2 `
  data=图片信息
; Z% s# x5 }: Z5 g/ ~% L) A1 Q" B( E  conn=.." l$ U% z. z3 s) L8 J7 `+ W/ m
  ByteArrayInputStream in=new ByteArrayInputStream(data);$ _' }6 L) ~% H
  updateBlob(in, conn, “Student”,”Picture”,”Name”,”zhangsan”);
3 o/ v# U7 G; E6 N8 ]  …
3 I+ q7 W& L3 p6 y' t  …
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

Oracle技术:Oracle中Blob字段的写入处理介绍

</p>  public static void updateBlob(  InputStream instream,
6 E8 z2 b& U" r2 O9 m! N  Connection conn,  p. s. T5 X& }5 v7 @8 t
  String table,
8 x" f6 S: S, Q3 E5 n( k) [' [  String blobColumn,) H7 Q: I1 V2 v$ B( K+ R
  String keyColumn,
! Z3 q0 I1 M( [6 ]  String keyValue)7 S) F3 R! F( b# n+ O
  throws SQLException, IOException$ b2 X+ B8 W  }6 f5 C9 m
  {- T; Z  H9 W+ I4 s* V' r2 o
  Statement stmt = null;
1 J7 s) }# U/ K  OracleResultSet rs = null;
9 h. B9 e$ _) ^# V. w6 l  BLOB blob = null;
5 ?4 z1 O4 x. [0 r6 c0 T: F  boolean oldAutoCommit = conn.getAutoCommit();
* P2 \' a1 k, F, x+ ~6 ~* L0 E  StringBuffer sqlBuffer = new StringBuffer();5 S% ^$ M) I$ R& s5 o8 g
  try {
4 _/ q, r2 |9 I% A* ?; N7 O  conn.setAutoCommit(false);. f: g- @2 z5 T$ \6 c- Z% a4 V; m
  sqlBuffer.append("select ");2 }9 y. }; U# _' Q
  sqlBuffer.append(blobColumn);0 O/ a# v( q8 J9 w) U  t) k' {
  sqlBuffer.append(" from ");
0 u9 Z& O9 _5 y3 z1 X% ~* G  sqlBuffer.append(table);
6 F$ ~1 _, |( W$ @- W7 {  sqlBuffer.append(" where ");
8 D, t; s7 H0 ~0 p  sqlBuffer.append(keyColumn);. A- k. S) t; F" B2 f- h3 r+ R
  sqlBuffer.append("='");. e4 u+ I% N' a" Q
  sqlBuffer.append(keyValue);* |0 J2 T3 Q2 D! Y3 R& ], c/ F6 ?
  //注重这里的”for update”& ^$ D# `. z+ {" o) F
  sqlBuffer.append("' for update ");
( W' K* N( I2 Z% O1 ?  stmt = conn.createStatement();' X" ]; a! F' `* b( m! t
  rs = (OracleResultSet) stmt.executeQuery(sqlBuffer.toString());
- U% e8 h( L* p0 _/ h+ g6 ]  if (!rs.next())4 y8 ?+ }2 @, ]5 T* v3 T
  {
& d6 Y4 U2 M; q2 h7 t9 R  rs.close();
; j& Z2 c# i4 h1 z" J1 F  stmt.close();: a2 A6 ^4 C: Q, N
  throw new IllegalArgumentException(* w" I' c* u8 K9 j) A& P! s) r
  "no record found for keyValue: '" + keyValue + "'");9 y1 c+ [1 ^% s, h* e3 k: ^
  }4 O9 j# ~7 s5 X+ Q
  blob = rs.getBLOB(1);/ u/ r( R+ u0 }2 j
  OutputStream outstream = blob.getBinaryOutputStream();+ E$ H! D. \$ I7 g2 C" g# p9 n( N
  int bufferSize = blob.getChunkSize();7 p0 E* e/ S* v$ K: C9 ~% G
  byte[] buffer = new byte[bufferSize];6 S4 f! T0 I% @5 k; x# y, x
  int bytesRead = -1;
8 Z, t. B0 \; p  d) t6 p" f  while ((bytesRead = instream.read(buffer)) != -1)
/ x' [3 }7 c" ^6 [, I  {5 {3 E: ]0 [* U
  outstream.write(buffer, 0, bytesRead);7 W( J+ A' e$ t# H5 Q& X
$ K: V# V# q, I* _9 {, W
  }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:21 | 显示全部楼层

Oracle技术:Oracle中Blob字段的写入处理介绍

</p>  instream.close();
1 s  Z+ U, ]' J- L, B  outstream.close();& S7 V# X2 {8 w, k& i
  rs.close();( q1 d; _7 d4 P/ x5 {
  stmt.close();
7 R8 j5 T- o2 Z9 v  }
; K7 S( e" J' ~& N/ p! P  catch (SQLException e)
0 a/ ^5 g# J7 w( \  {3 b1 N. M" Q5 n: L1 Y# r2 i. X
  throw e;
: D7 ~/ Y. M% x* H1 `% M- ~* T  }
. s! J" z& d4 L9 X! H: N" I7 N  catch (IOException e). o; Q4 K7 ?" q/ q7 n" {
  {9 \, e" }! S* O' J5 S: F" e  V/ ?7 e5 M
  throw e;
" i/ I( M* G2 r% x  }7 ?- x! s- A& L/ ]8 C& x! ]
  finally {
, }" P1 k2 L4 t- k  conn.setAutoCommit(oldAutoCommit);
4 f& z* |. }2 E! V% K8 a) q4 T. o  }
, T( q  @( V) b0 W( j1 b  }( r4 q3 M1 r. t0 _" f- q  L& Y
  二、PL/SQL下5 {4 W4 p; l; O. i! n
  (例子表结构如一所示)
6 w' e% G8 v$ t3 N& N7 A  i.插入一空的Blob。' O3 K! P) O  |* @. G9 D
  …/ p5 x! r0 r3 T4 p& {9 M
  declare
) \! b7 Z, i/ z6 E  bufferBlob BLOB;; e( j! Y/ C( j2 d# X' z: N
  data        RAW(…)
0 }* W! w$ J$ Y6 N  …1 I3 w* k8 j; v" _0 F4 p" y8 e
  INSERT  INTO Student VALUES(‘zhangsan’, 20 , empty_blob() );
8 _2 t4 C4 @' Q% K( d& p! I  …0 U5 \$ }1 F9 W3 z
  ii.更新该记载的Blob。
2 `6 l7 V% h: X# N  U3 Y  …/ ]$ [7 F" y) ?. H
  SELECT Picture INTO bufferBlob FROM Student WHERE Name=’zhangsan’ FOR UPDATE;
/ b6 @4 c; u# n& X) W* d  DBMS_LOB.OPEN(bufferBlob , dbms_lob.lob_readwrite);* b3 b5 S1 p; P* J% W
  dbms_lob.write(bufferBlob , utl_raw.length(data) , data);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 01:48 , Processed in 0.285960 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表