自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JSP連接ORACLE數(shù)據(jù)庫時注意的一些問題

開發(fā) 后端
本文介紹JSP連接ORACLE數(shù)據(jù)庫時注意的一些問題,以及如何去處理Clob、BLOB和編碼問題。

一、如何去處理Clob、BLOB的大類型

CLOB可用于存放大文本數(shù)據(jù),最多可存儲4GB數(shù)據(jù),在應(yīng)用開發(fā)中比較常見.java提供的sql.Clob類與之對應(yīng).它提供兩個方法來讀取Clob的數(shù)據(jù):
◆getCharacterStream() 方法返回按unicode編碼的輸入流(java.io.Reader對象)
◆getAsciiStream() 方法返回按ASCII編碼的輸入流(java.io.InputStream對象)

所以如果你的ORACLE數(shù)據(jù)庫中有可能存儲中文字符的話,就要使用前一個方法.現(xiàn)在舉一個實際的例子,讓我一步步學(xué)習(xí)如何使用CLOB.首先,創(chuàng)建一個含CLOB字段的表:create table test (id INTEGER, content clob);

接下來, 我們通過JSP往這張表里插入一條記錄,然后再獲取顯示它.

插入操作:

以上需要注意的幾點是:

1)clob類型的數(shù)據(jù)不能直接insert,要先通過empty_clob()方法給它分配一個locator(同理,blob的用 empty_blob()函數(shù)分配locator).然后把它select出來(此時它當(dāng)然沒有數(shù)據(jù),但結(jié)果集不是空的),得到一個Clob的對象,修改該對象的內(nèi)容讓它滿足我們的需要,再通過update方法更新該行記錄.

2) 通過select修改含lob類型的記錄時一定要鎖定該行(通過for update關(guān)鍵字實現(xiàn)),否則oracle會報錯.

3) 剛插入的記錄就select for update, 會出現(xiàn)"違反讀取順序"錯誤,解決辦法是將自動提交功能置為false,即不允許自動提交,然后commit它,再select,就可以了. 這就是上面那段代碼里//*兩行的作用.

下面,我們將剛插入的記錄從數(shù)據(jù)庫中讀取出來并顯示之:

二、編碼問題

因為JAVA的開發(fā)者是老外,所以他們對中文的支持并不是太好,這一點讓不少的我們感到很是頭痛,也就是我們通過說的漢字編碼問題吧,關(guān)于一些漢字編碼的規(guī)范我就不多說了,我主要是談?wù)勗诤蚈RACLE數(shù)據(jù)庫連接時的一些小問題,不過這些小問題很是讓人頭痛的。

1、在插入到ORACLE數(shù)據(jù)庫中的中文問題要轉(zhuǎn)換成編碼

2、從數(shù)據(jù)庫中讀到中文又要轉(zhuǎn)換成編碼

讓我們看一個編碼的JAVA代碼:

  1. import java.io.UnsupportedEncodingException;  
  2. public class ECov  
  3. {  
  4. public static String asc2gb(String asc){  
  5. String ret;  
  6. if(asc==null)return asc;  
  7. try{  
  8. ret=new String(asc.getBytes("ISO8859_1"),"GB2312");  
  9. }  
  10. catch(UnsupportedEncodingException e){  
  11. ret=asc;  
  12. }  
  13. return ret;  
  14. }  
  15. public static String gb2asc(String gb){  
  16. String ret;  
  17. if(gb==null)return gb;  
  18. try{  
  19. ret=new String(gb.getBytes("GB2312"),"ISO8859_1");  
  20. }  
  21. catch(UnsupportedEncodingException e){  
  22. ret=gb;  
  23. }  
  24. return ret;  
  25. }  
  26. public static int byte2int(byte b){  
  27. return ((-1)>>>24)&b;  
  28. }  

其實這段代碼的意思也就是把兩種方法合而為一了。

在進(jìn)行數(shù)據(jù)庫插入時要用ECov.gb2asc(arg),要在讀時要用ECov.asc2gb(arg)。其中最關(guān)鍵的一點就是Oracle好像只認(rèn)識ISO8859_1這種格式的編碼吧(僅是我的想法)。

三、一些小細(xì)節(jié)

1.就是setAutoCommit(true or false),就是我們在sqlPlus中常用commit()的功能,如果是用true,就不要用commit(),否則還是用commit()方法的。

2.對日期類型的處理,其實他并不是想象中setDate(),getDate()那么簡單的,中間有很大的漏洞。大家自己多調(diào)試就會覺得有很多的樂趣的。

3.在和數(shù)據(jù)庫中最好是采用連接池技術(shù),用標(biāo)準(zhǔn)的J2EE的環(huán)境,用簡單的JNDI技術(shù),是很好的一種方法的。

【編輯推薦】

  1. JSP自定義標(biāo)簽由淺到深詳細(xì)講解
  2. 在JSP環(huán)境中配置使用fckeditor詳細(xì)講解
  3. 基于JSP實現(xiàn)數(shù)據(jù)庫中圖片的存儲與顯示
  4. 構(gòu)造JSP和Javabean開發(fā)和發(fā)布環(huán)境的方法
  5. JSP+JavaBean+Servlet工作原理實例講解
責(zé)任編輯:佚名 來源: builder
相關(guān)推薦

2010-08-03 14:20:26

2017-01-03 15:23:56

Android動態(tài)加載SO庫

2010-08-25 14:32:49

DB2數(shù)據(jù)庫遷移

2010-06-29 16:56:49

SQL Server數(shù)

2010-05-04 15:59:05

Oracle字符集

2011-07-29 15:58:53

SGAOracle

2010-08-31 14:13:48

DB2數(shù)據(jù)庫

2012-04-25 22:45:46

2016-10-18 22:10:02

HTTP推送HTML

2023-03-06 08:34:39

FURPS模型數(shù)據(jù)庫

2011-03-10 13:19:47

Oracle數(shù)據(jù)庫

2011-03-08 14:28:03

proftpdGentoo

2011-07-27 15:01:48

MySQL數(shù)據(jù)庫內(nèi)存表

2009-06-12 10:25:42

Webservices

2018-06-12 15:39:41

容器部署云平臺

2022-01-16 08:04:44

集群部署canal

2011-08-01 13:59:22

Oracle數(shù)據(jù)庫命名空間

2011-07-26 09:29:15

Oracle RACASM

2009-08-06 16:01:30

C#接口成員

2012-12-19 11:40:13

思科路由器
點贊
收藏

51CTO技術(shù)棧公眾號