JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » JDBC/SQL討論區 » Oracle  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 處理 BLOB 和 CLOB 型態 的方法 [精華]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-07-05 23:41 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
處理 BLOB 和 CLOB 資料型態時
和其它的資料型態,有些不同
因此提供相關的文章 ...

http://www.503room.com/news_system/htmlnews/20030702/1765163936.html

方法不難 .. 但是有資料參考 ...
需要用上時 .. 很方便
GOOD LUCK


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:browser]
magicfish





發文: 209
積分: 3
於 2003-07-17 16:30 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
但是以前看人用Oracle時,發現LOB檔案的實際存放位置根本是獨立在其他的地方
欄位裡面放的只是類似指標的東西,所以直接取出會是一個只有1KB大小的檔案
有人可以對這方面提供一點意見或是指正嗎?
======================過幾天後=================
後來去拿了以前的程式來看,發現跟上面的做法有差異,而且oracle真是有夠吃記憶體!
大概是因為存入的手法不一樣導致的問題,以為在MySQL上能用的方法一樣能套在oracle
而且過去用JDK1.3.1測試還能跑,到了JDK1.4.2反而出錯,只剩下取出資料的程式碼可用

補:Oracle官方版
http://otn.oracle.com/sample_code/tech/java/sqlj_jdbc/files/advanced/LOBSample/Readme.html


magicfish edited on 2003-07-19 17:37
reply to postreply to post
One day,a girl appeared before the boy suddenly.
She said that it was an "angel" about herself.
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:browser]
magicfish





發文: 209
積分: 3
於 2003-07-18 21:10 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.sql.*;
import java.io.*;
import oracle.jdbc.*;
public class Blobss3{//xa
        public static void main(String args[]){//xb
             Connection con=null;
                int i=0;
                if(args.length<2){
                        System.err.println("Syntax:<java Blobs [file] [ID]");
                        return;
                        }
                 try{//tryy
                Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
                con=DriverManager.getConnection("jdbc:oracle:thin:@qoh2002:1521:AIR","yoshi","yoshigo");                     
                con.setAutoCommit(false);      
                File f=new File(args[0]);
                        PreparedStatement pstmt = con.prepareStatement(
                        "Insert into TEST(NAME,VI,ID) VALUES(?,EMPTY_BLOB(),?)");
                        int num=Integer.parseInt(args[1]);
                        pstmt.setString(1,args[0]);
                        pstmt.setInt(2,num);
                        pstmt.execute();
                        pstmt.close();
                        Statement stmt = con.createStatement();
                        ResultSet rs = stmt.executeQuery("SELECT VI FROM TEST WHERE ID='"+num+"' FOR UPDATE");
                        rs.next();
                        oracle.sql.BLOB BB=(oracle.sql.BLOB)rs.getBlob(1);
                        OutputStream blobOutputStream =BB.getBinaryOutputStream();
                        InputStream sampleFileStream = new FileInputStream(f);
                        byte[] buffer = new byte[10240];
                        int nread = 0;
                         while( (nread= sampleFileStream.read(buffer)) != -1 )
                         blobOutputStream.write(buffer, 0, nread); // Write to Blob
                          sampleFileStream.close();
                        blobOutputStream.close();
                                    con.commit();
                                    con.close();
                        
                 }//tryy
                   catch(Exception e){
                          e.printStackTrace();
                          }
                          finally{
                                  if(con!=null){
                                          try{con.close();}
                                          catch(Exception e){}
                                          }
                                   }
                           }//xb
                          }//xa

補個東西表示敬意=>

存入BLOB欄位的測試程式碼
table名字:TEST
欄位 NAME(varchar),VI(BLOB),ID(NUMBER)
第一個參數是檔名,第二個是ID


koji edited on 2003-07-18 21:12
reply to postreply to post
One day,a girl appeared before the boy suddenly.
She said that it was an "angel" about herself.
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:magicfish]
tonson



發文: 0
積分: 0
於 2003-07-29 16:29 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
根據"ORACLE9i JAVA開發系列(一):JDBC程式設計"一書所載

根據LOB內容多寡,實際的資料可以儲存在表格,或是表格外部
如果LOB內容少於4GB,就儲存於包含LOB欄位的表格內
如果大於4GB,內容將儲存於表格外
如果是BFILE欄位,在資料庫內只會存放定位器-指向外部檔案的指標

以我的經驗是資料會存在TABLE中,我直接把TABLE export後
檔案是很大的


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:tonson]
magicfish





發文: 209
積分: 3
於 2003-07-29 19:38 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
tonson wrote:
根據"ORACLE9i JAVA開發系列(一):JDBC程式設計"一書所載

根據LOB內容多寡,實際的資料可以儲存在表格,或是表格外部
如果LOB內容少於4GB,就儲存於包含LOB欄位的表格內
如果大於4GB,內容將儲存於表格外
如果是BFILE欄位,在資料庫內只會存放定位器-指向外部檔案的指標

以我的經驗是資料會存在TABLE中,我直接把TABLE export後
檔案是很大的

該不會看錯了吧,假如真的是以4GB為限制,那這資料庫的設計就沒什麼道理

有人找給我的Oracle官方資料是寫著:
the LOB value is automatically moved out of the row once it extends beyond approximately 4,000 bytes.


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:magicfish]
worookie

Small Ship

版主

發文: 2092
積分: 21
於 2003-07-30 00:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
magicfish wrote:
該不會看錯了吧,假如真的是以4GB為限制,那這資料庫的設計就沒什麼道理

有人找給我的Oracle官方資料是寫著:
the LOB value is automatically moved out of the row once it extends beyond approximately 4,000 bytes.


tonson 應該是看錯了
以Oracle 9i 為例, lob 最大也就只能存到 4G 而已
其中 clob/nclob/blob 是以 ~4k 為界來判斷要存在表格內或外
而 lob 中的 bfile 就永遠都是存在資料庫外了


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:browser]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-12-10 14:15 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
發現到另一個不錯的資料 ...

史帝芬心得筆記 - 串流資料型別
http://my.so-net.net.tw/idealist/Java/JDBC/streamDataType.html

快速上手 ....


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:browser]
LSP





發文: 26
積分: 1
於 2004-05-29 17:29 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
原文已經消失了ㄝ, 請問大大有無備分阿?

可以分享一下嗎??


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:browser]
fjj





發文: 127
積分: 5
於 2004-06-02 12:33 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Here you are!!...

http://my.so-net.net.tw/idealist/Java/JDBC/streamDataType.html

最近快被BLOB 搞死!!...
奇怪...難道沒有簡單好用的 3rd Party 提供的 Class
可以方便一點存取Oracle嗎??

突然想起 .Net ADO的好處....


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:fjj]
ncuable





發文: 55
積分: 0
於 2005-02-11 17:16 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
在IBM的範例nhttp://www2.tw.ibm.com/developerWorks/tutorial/content/java/t20031215.html

reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:browser]
WayneChang





發文: 6
積分: 0
於 2005-07-08 14:43 user profilesend a private message to usersend email to WayneChangreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
試試看..沒處理過
希望效能不要太差啊~


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:browser]
peanus





發文: 18
積分: 0
於 2005-09-11 08:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
對不起,我想請問一下,
是一個blob object最大可以存4GB,
還是Oracle9i 最大只能存4GB?


reply to postreply to post
最菜的新手
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:browser]
linexpmail

好玩就好



發文: 456
積分: 15
於 2005-09-11 10:03 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
就查到的 10g 版本資料來看,主要考量當初表格定義哪種 LOB 格式,
除 BFILE 之外,以 8k data block 設定可以存到一個 32TB 物件,參考看看。

http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements001.htm#sthref178

The built-in LOB datatypes BLOB, CLOB, and NCLOB (stored internally) and BFILE (stored externally) can store large and unstructured data such as text, image, video, and spatial data. The size of BLOB, CLOB, and NCLOB data can be up to (4 gigabytes -1) * (the value of the CHUNK parameter of LOB storage). If the tablespaces in your database are of standard block size, and if you have used the default value of the CHUNK parameter of LOB storage when creating a LOB column, then this is equivalent to (4 gigabytes - 1) * (database block size). BFILE data can be up to 2(32)-1 bytes, although your operating system may impose restrictions on this maximum.


reply to postreply to post
不除妄想不求真
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:worookie]
leohong





發文: 125
積分: 1
於 2007-06-06 16:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
上面一些link好像都不見了
我現在使用Spring + Hibernate + Oracle 9i同樣碰到超過4K的檔案無法寫入DB的情況. 從網路上有人建議可以在hibernate.cfg.xml中加入
1
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"/>

但仍舊無法解決超過4K無法寫入的問題, 請問有什麼方法可解嗎?


reply to postreply to post
作者 Re:處理 BLOB 和 CLOB 型態 的方法 [Re:leohong]
leohong





發文: 125
積分: 1
於 2007-06-06 20:03 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
已經找到答案了, 我的資料庫雖然是Oracle 9i的, 但使用9i的JDBC driver是行不通的, 我改成使用Oracle 10g(10.1.0.5)的版本就解決了這個問題, 不過, 比較弔詭的是, 使用10.2.x的卻又不work了

reply to postreply to post
» JWorld@TW »  JDBC/SQL討論區 » Oracle

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8