1.使ç¨jdkä¸çæ¹æ³è¿è¡ä¼ è¾ãå¨ResultSet ä¸ægetBlob()æ¹æ³ï¼å¨PreparedStatementä¸æsetBlob()æ¹æ³ï¼æ以大å¤æ°äººé½ä¼å°è¯setBlob
(),getBlob() è¿è¡è¯»åï¼æè 两个æ°æ®åºä¹é´BLOBçä¼ è¾ãè¿ç§æ¹æ³å®é ä¸æ¯è¡ä¸éçï¼æ®ç½ä¸çä¸äºèµæä»ç»ï¼è¯´sunå®æ¹çææ¡£æäºæ¹æ³
é½æ¯é误çã
2.使ç¨ResultSet.getBinaryStream åPreparedStatement.setBinaryStream对BLOBè¿è¡è¯»åæ两个æ°æ®åºé´çä¼ è¾ãè¿ç§æ¹æ³æèªå·±å°è¯è¿ï¼
åç°ï¼å¦æBLOBä¸åå¨çæ¯ææ¬æ件çè¯ï¼å°±æ²¡é®é¢ï¼å¦ææ¯äºè¿å¶æ件ï¼ä¼ è¾å°±ä¼æé®é¢ã
æ ¹æ®èªå·±çç»éªï¼ä»¥åæ¥é äºOracleçå®æ¹ææ¡£ï¼é½æ¯ä½¿ç¨å¦ä¸å¤çæ¹æ³ï¼
1.æ°å»ºè®°å½ï¼æå ¥BLOBæ°æ®
1.1é¦å æ°å»ºè®°å½çæ¶åï¼ä½¿ç¨oracleçå½æ°æå ¥ä¸ä¸ªç©ºçBLOBï¼å设å段Aæ¯BLOBç±»åç:
insert xxxtable(A,B,C) values(empty_blob(),'xxx','yyyy')
1.2åé¢åæ¥è¯¢åææå ¥çè®°å½ï¼ç¶åæ´æ°BLOBï¼å¨æ¥è¯¢åï¼æ³¨æ设置Connectionçä¸ä¸ªå±æ§:
conn.setAutoCommit(false);å¦æ缺å°è¿ä¸æ¥ï¼å¯è½å¯¼è´fetch out of sequenceçå¼å¸¸.
1.3 æ¥è¯¢åææå ¥çè®°å½,åé¢è¦å â for update â,å¦ä¸ï¼
select A from xxxtable where xxx=999 for update ,å¦æ缺å°for updateï¼å¯è½åºç°row containing the LOB value is not locked
çå¼å¸¸
1.4 ä»æ¥è¯¢å°ç BLOBå段ä¸ï¼è·åblob并è¿è¡æ´æ°ï¼ä»£ç å¦ä¸ï¼
BLOB blob = (BLOB) rs.getBlob("A");
OutputStream os = blob.getBinaryOutputStream();
BufferedOutputStream output = new BufferedOutputStream(os);
åé¢å使ç¨output.writeæ¹æ³å°éè¦åå ¥çå 容åå°outputä¸å°±å¯ä»¥äºãä¾å¦æ们å°ä¸ä¸ªæ件åå ¥è¿ä¸ªå段ä¸ï¼
BufferedInputStream input = new BufferedInputStream(new File("c://hpWave.log").toURL().openStream());
byte[] buff = new byte[2048]; //ç¨åæ件åå ¥çç¼å²
int bytesRead;
while(-1 != (bytesRead = input.read(buff, 0, buff.length))) {
output.write(buff, 0, bytesRead);
System.out.println(bytesRead);
}
ä¸é¢ç代ç å°±æ¯ä»inputé2kå°è¯»åï¼ç¶ååå ¥å°outputä¸ã
1.5ä¸é¢æ§è¡å®æ¯åï¼è®°å¾å ³éoutput,input,以åå ³éæ¥è¯¢å°çResultSet
1.6æåæ§è¡conn.commit();å°æ´æ°çå 容æ交ï¼ä»¥åæ§è¡conn.setAutoCommit(true); æ¹åConnctionçå±æ§
2.ä¿®æ¹è®°å½ï¼æ¹æ³ä¸ä¸é¢çæ¹æ³ç±»ä¼¼ï¼
2.1é¦å æ´æ°BLOB以å¤çå ¶ä»å段
2.2 使ç¨1.3ä¸ç±»ä¼¼çæ¹æ³è·åè®°å½
2.3 ä¿®æ¹çè¿ç¨ä¸ï¼æ³¨æ以ä¸:a éè¦æ´æ°çè®°å½ä¸ï¼BLOBæå¯è½ä¸ºNULL,è¿æ ·å¨æ§è¡blob.getBinaryOutputStream()è·åçå¼å¯è½ä¸º
null,é£ä¹å°±å ³éåæselectçè®°å½ï¼åæ§è¡ä¸æ¬¡update xxxtable set A = empty_blob() where xxx, è¿æ ·å°±å åå ¥äºä¸ä¸ªç©ºçBLOB(ä¸æ¯null),ç¶åå
使ç¨1.3,1.4ä¸çæ¹æ³æ§è¡æ´æ°è®°å½.b 注æå«å¿äºå æ§è¡setAutoCommit(false),以å"for update",以ååé¢çconn.commit();çã
3.读åBLOBå段ä¸çæ°æ®.
3.1 读åè®°å½ä¸éè¦setAutoCommit(),以å select ....for update.
3.2 使ç¨æ®éçselect æ¹æ³æ¥è¯¢åºè®°å½
3.3 ä»ResultSetä¸è·åBLOB并读åï¼å¦ä¸ï¼
BLOB b_to = (BLOB) rs.getBlob("A");
InputStream is = b_from.getBinaryStream();
BufferedInputStream input = new BufferedInputStream(is);
byte[] buff = new byte[2048];
while(-1 != (bytesRead = input.read(buff, 0, buff.length))) {
//å¨è¿éæ§è¡åå ¥ï¼å¦åå ¥å°æ件çBufferedOutputStreamé
System.out.println(bytesRead);
}
éè¿å¾ªç¯ååºblobä¸çæ°æ®ï¼åå°buffé,åå°buffçå 容åå ¥å°éè¦çå°æ¹
4.两个æ°æ®åºé´blobå段çä¼ è¾
类似ä¸é¢1å3çæ¹æ³ï¼ä¸è¾¹è·åBufferedOutputStream,å¦å¤ä¸è¾¹è·åBufferedInputStreamï¼ç¶å读åºåå ¥ï¼éè¦æ³¨æçæ¯åå ¥æç¨ç
Connectionè¦æ§è¡conn.setAutoCommit(false);以åè·åè®°å½æ¶æ·»å â for update â以åæåçcommit();
æ»ç»ä»¥ä¸æ¹æ³ï¼å ¶æ ¹æ¬å°±æ¯å å建空çBLOBï¼åè·åå ¶BufferedOutputStreamè¿è¡åå ¥ï¼æè·åBufferedInputStreamè¿è¡è¯»å
ï¼1ï¼å¯¹æ°æ®åºclobåæ§è¡æå ¥æä½