﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-redcreen-文章分类-oracle</title><link>http://www.blogjava.net/redcreen/category/14980.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 18:26:56 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 18:26:56 GMT</pubDate><ttl>60</ttl><item><title>[转]在Java中使用Oracle blob</title><link>http://www.blogjava.net/redcreen/articles/68475.html</link><dc:creator>charles</dc:creator><author>charles</author><pubDate>Fri, 08 Sep 2006 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/redcreen/articles/68475.html</guid><wfw:comment>http://www.blogjava.net/redcreen/comments/68475.html</wfw:comment><comments>http://www.blogjava.net/redcreen/articles/68475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/redcreen/comments/commentRss/68475.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redcreen/services/trackbacks/68475.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">Oracle中的lob (Large Object)可以存储非常大的数据（可能是4GB），这样就可以通过将文件或其它任何对象序列化成字节输出流(OutputStream)后写入数据库，之后使用字节输入流(InputStream)将数据读出然后反序列化为原始文件或对象。操作时需要使用oracle的JDBC包，它扩展了sun的JDBC包中的Blob对象。同时需要注意一些细节。下面的代码演示如何使用blob（实例中需要Oracle的JDBC包）。<br /><br /></font>
				<font size="2">
						<font color="#ffa500">
								<font color="#800080">import oracle.jdbc.OracleResultSet;  <font color="#006400">// 使用Oracle的ResultSet对象<br /></font>import oracle.sql.BLOB;  </font>
								<font color="#006400">// 使用Oracle的BLOB对象，而不是sun的Blob</font>
								<br />
						</font>
						<br />...<br /><br />try{<br />  Connection conn=&lt;数据库连接&gt;;<br />  File file=&lt;存入数据库的文件对象&gt;;<br />  </font>
				<font size="2">
						<font color="#800080">conn.setAutoCommit(false);  <font color="#006400">// 取消Connection对象的auto commit属性</font><br /></font>  String file_name=file.getName();</font>
		</p>
		<p>
				<font size="2"> <font color="#800080"> </font></font>
				<font size="2">
						<font color="#006400">// 数据库中有一个item表，其中的file_name (varchar2)存储文件名，file_blob (blob)存储文件对象<br /></font>  String sql="INSERT INTO item (file_name,file_blob) VALUES ('" + file_name + "',<font color="#800080">EMPTY_BLOB()</font><font color="#000000">)</font>";  </font>
				<font size="2">
						<font color="#006400">// 使用“EMPTY_BLOB()“成生一个空blob<br /></font>  Statement stmt=conn.createStatement();<br />  int count=stmt.executeUpdate(sql);<br />  <br /></font>
				<font size="2">  sql="SELECT file_blob FROM item WHERE iid='" + iid + "' <font color="#800080">FOR UPDATE</font>";  <font color="#006400">// 使用“FOR UPDATE”得到表的写锁</font><br />  ResultSet rs=stmt.executeQuery(sql);<br />  rs.next();<br />  BLOB blob=((OracleResultSet)rs).getBLOB("file_blob");  <font color="#006400">// 得到BLOB对象</font><br />  OutputStream out=blob.getBinaryOutputStream();  <font color="#006400">// 建立输出流<br /></font>  InputStream in=new FileInputStream(file);  <font color="#006400">// 建立输入流<br /></font>  int size=blob.getBufferSize();<br />  byte[] buffer=new byte[size];  <font color="#006400">// 建立缓冲区</font><br />  int len;<br />  while((len=in.read(buffer)) != -1)<br />    out.write(buffer,0,len);<br />  in.close();<br />  out.close();</font>
		</p>
		<p>
				<font size="2">  <font color="#800080">conn.commit();</font><br />}<br />catch(Exception ex){<br />  try{<br />    conn.rollback();<br />  }<br />  catch(SQLException sqle){<br />    System.err.println(sqle.getMessage());<br />  }<br />}<br /><br />如果要读出文件的话只需调用BLOB的getBinaryStream()生成一个输入流，再写入一个文件就行了。<br /><br /></font>
		</p>
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=779983</p>
<img src ="http://www.blogjava.net/redcreen/aggbug/68475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redcreen/" target="_blank">charles</a> 2006-09-08 11:46 <a href="http://www.blogjava.net/redcreen/articles/68475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>