Oracle中Blob字段的写入处理是怎样的?
Oracle中Blob字段的写入处理是怎样的?
Oracle中的Bloc字段的处理较其他字段来说,会有一些特殊性。现就对在java和pl/sql下,Blob字段的处理和大家做一些交流。 下面,简单介绍一下Blob在以下两种环境中的写入处理, u java环境 u PL/SQL环境 一、java环境 1、 Blob的插入操作 1) 插入一空的Blob。
2) 更新该纪录的Blob。 例子: 比如表结构如下: CREATE TABLE Student ( Name VARCHAR2(30), Age Int, Picture Blob); i。插入一空的Blob。
String command=”INSERT INTO Student VALUES(?,?,?)”; Connection conn=null; PreparedStatement ps=null; try { conn=…。
; ps=conn。 prepareStatement(command); ps。setString(1,”ZhangSan”); ps。setInt(2,20); ps。setBlob(3, BLOB。empty_lob()); ps。
executeUpdate(); … ii。更新该纪录 … byte[] data=null; Connection conn=null; Try { data=… //图片信息 conn=。。 ByteArrayInputStream in=new ByteArrayInputStream(data); updateBlob(in, conn, “Student”,”Picture”,”Name”,”zhangsan”); … … public static void updateBlob( InputStream instream, Connection conn, String table, String blobColumn, String keyColumn, String keyValue) throws SQLException, IOException { Statement stmt = null; OracleResultSet rs = null; BLOB blob = null; boolean oldAutoCommit = conn。
getAutoCommit(); StringBuffer sqlBuffer = new StringBuffer(); try { conn。setAutoCommit(false); sqlBuffer。append("select "); sqlBuffer。
append(blobColumn); sqlBuffer。append(" from "); sqlBuffer。append(table); sqlBuffer。append(" where "); sqlBuffer。append(keyColumn); sqlBuffer。
append("='"); sqlBuffer。append(keyValue); //注意这里的”for update” sqlBuffer。append("' for update "); stmt = conn。createStatement(); rs = (OracleResultSet) stmt。
executeQuery(sqlBuffer。toString()); if (!rs。next()) { rs。close(); stmt。close(); throw new IllegalArgumentException( "no record found for keyValue: '" + keyValue + "'"); } blob = rs。
getBLOB(1); OutputStream outstream = blob。getBinaryOutputStream(); int bufferSize = blob。getChunkSize(); byte[] buffer = new byte[bufferSize]; int bytesRead = -1; while ((bytesRead = instream。
read(buffer)) != -1) { outstream。write(buffer, 0, bytesRead); } instream。close(); outstream。close(); rs。close(); stmt。
close(); } catch (SQLException e) { throw e; } catch (IOException e) { throw e; } finally { conn。setAutoCommit(oldAutoCommit); } } 二、PL/SQL下 (例子表结构如一所示) i。
插入一空的Blob。 … declare bufferBlob BLOB; data RAW(…) … INSERT INTO Student VALUES(‘zhangsan’, 20 , empty_blob() ); … ii。
更新该纪录的Blob。 … SELECT Picture INTO bufferBlob FROM Student WHERE Name=’zhangsan’ FOR UPDATE; DBMS_LOB。OPEN(bufferBlob , dbms_lob。
lob_readwrite); dbms_lob。write(bufferBlob , utl_raw。length(data) , data); 以上是我对于这个问题的解答,希望能够帮到大家。
答:blob类型是存放二进制流的,不应该使用这种类型存放字符数据的,应该使用clob类型存放大字段字符数据,存放的二进制流可能是文件,图片或字符,如果存的是图片,你...详情>>
问:同事ip:10.101.107.28 我的IP:10.101.104.23我们在...
答:你们公司是WINDOWS域环境吗,如果是的话,你在网上邻居里应该能看到对方的主机。让她把文件夹共享出来就可以。 如果不是WINDOWS域,那得看你们是不是在一个...详情>>
问:数据结构顺序表的建立,可定义顺序表 #define maxnum elemtyp...
答:打开VC ,然后点击新建,出来界面之后选择Win32 Console Application并输入工程的名称和选择项目的位置,然后出现“一个空工程”,在点击“...详情>>