1. 程式人生 > >Oracle字符集碰到JAVA

Oracle字符集碰到JAVA

Oracle的字符集是US7ASCII,用JAVA寫入中文的時候問題來了:無論是在sqlplus中還是從JAVA程式讀,中文不能正常顯示。JAVA預設在記憶體中使用UNICODE編碼,而資料庫的字符集不能說變就變,還要存中文,怎麼解決?
        如果使用Thin Driver,那麼需要在查詢資料庫的時候將字符集由ISO轉換為GBK,寫入資料庫的時候將字符集由GBK轉換為ISO.
        舉個例子:    插入一條記錄: 
              Connection conn=null;
             PreparedStatement pstmt = null;
            try {
                 String strSql="insert into tabA(A,B) values('1111','王超')";
                 conn=ds.getConnection();
                 strSql = new String(strSql.getBytes("GBK"), "ISO-8859-1");
                 pstmt = conn.prepareStatement(strSql);
                pstmt.executeUpdate();
      }catch (Exception e) {
             //logger.error(e, e);
        }finally {
            disconn(conn, pstmt);
 }
                             查詢一條記錄: 
               Connection conn=null;
               PreparedStatement pstmt = null;
              ResultSet rs=null;
              try {
                String strSql="select B from tabA where A='1111'";
                conn=ds.getConnection();
                strSql = new String(strSql.getBytes("GBK"), "ISO-8859-1");
                pstmt = conn.prepareStatement(strSql);
                rs=pstmt.executeQuery();
               String strB;
              if (rs.next()){
                   strB=new String(rs.getString(1) .getBytes("ISO-8859-1"), "GBK");
          } catch (Exception e) {
              //logger.error(e, e);
        }finally {
             disconn(conn, pstmt, rs);
}
這裡建議你在屬性檔案裡設定oracle字符集,根據字符集判斷
是否轉碼,以增加應用的移植性.
至於sqlplus,把登錄檔下面oralcle的home鍵下面的項NLS_LANG改成AMERICAN_AMERIC.US7ASCII應該就可以正常顯示中文了。

沒想到oracle的字符集編碼為us7ascii還帶來了點好處! 在頁面使用了gbk編碼,這樣在提交表單時中文以gbk編碼,而tomcat伺服器在獲取引數時(使用了struts的form,原理一樣)是按照單位元組解碼獲取的,那麼儲存到資料庫中的就是按照單位元組編碼的中文,這樣倒是省去了程式碼層的編碼轉換。但是在提取中文資料時就需要轉換一下,將原始字串按照gbk編碼,否則在頁面中顯示亂碼。 以下是結果: 儲存 1 頁面中指定編碼: <%@ page contentType="text/html; charset=gbk" %> 2 提交表單,其中包括中文: <html:text property="username" />填入“宕機“ 3 struts的form獲取: String username = ((LoginForm) form).getUsername(); 4 這個時候在log檔案中記錄username:  message.append(username);
   message.append(new String(username.getBytes("iso-8859-1"),"gbk")); 
   servlet.log(message.toString()); 發現1的結果是“???ú宕機”,說明中文被tomcat按照單位元組字串處理了,
當重新用gbk編碼時得到正確字元“宕機”。 5 直接儲存 CMUser user = new CMUser(username, password); session.save(user); 注意,這裡沒有重新編碼,正是由於oracle的字符集為us7ascii,與tomcat的編碼相容(iso-8859-1),所以可以直接儲存。 6 在sqlplus中檢視 發現能夠正確顯示中文“宕機”   接上 讀取 1 同上從頁面中獲取username:”宕機“ <html:text property="username"/>   填入“宕機” String username = form.getUsername(); form獲取
2 讀資料庫(hibernate)
Object o = session.createQuery(
     "from CMUser user where user.username = :name").setString(
     "name", username).uniqueResult();
CMUser user = (CMUser) o; 3 在返回到頁面之前轉碼 user.setUsername(new String(user.getUsername().getBytes("iso-8859-1"),"gbk")); 4 頁面顯示(使用struts) <bean:write name="user" property="username"/>
頁面指定gbk編碼,可以正確顯示漢字“宕機”

相關推薦

Oracle字符集碰到JAVA

Oracle的字符集是US7ASCII,用JAVA寫入中文的時候問題來了:無論是在sqlplus中還是從JAVA程式讀,中文不能正常顯示。JAVA預設在記憶體中使用UNICODE編碼,而資料庫的字符集不能說變就變,還要存中文,怎麼解決?         如果使用Thin

修改oracle字符集

命令 lose mac registry ase lte shu sql utf 最近在做項目中 遇到了oracle數據庫中查出來漢字全是亂碼,因為字符集不一致,所以要修改自己oracle的字符集,具體步驟如下: 通過ORACLE的SQL PLUS命令窗口改在SQL*PLU

oracle字符集查看、修改、版本查看

子集 char csdn 日期 數據庫 instance 但是 lang pla 一、什麽是Oracle字符集 Oracle字符集是一個字節數據的解釋的符號集合,有大小之分,有相互的包容關系。ORACLE 支持國家語言的體系結構允許你使用本地化語言來存

查看oracle字符集 版本

oracle linux 數據庫 字符集 查看oracle版本 select * from v%version;2.查看oracle字符集 select userenv(‘language‘) from dual;本文出自 “12259248” 博客,謝絕轉載!查看oracle字符集 版

oracle調用java代碼

java開發 16px oracle數據庫 軟件 非靜態方法 jdk 文件夾 導入jar inux   內容主要包括:java開發,打包java程序成jar文件,上傳jar文件到Oracle所在系統,Oracle導入jar文件中java類到數據庫中,Oracle根據導入ja

更改虛擬機上的oracle字符集

-s pen oracl intern com sys 設定 oracle字符集 gbk 修改oracle上邊的字符集,需要用到DBA數據庫管理員的權限,再修改字符集時要註意到修改後的字符集只能範圍變大(例如:當前的字符集是GBK,那你修改後可以是UTF-8就是說後者只能比

Oracle 字符集常見字符集及解決方案

sun png microsoft 打開 服務器 isp weight web 客戶端 Oracle 字符集常見字符集及解決方案 一.查看字符集: 1.查詢服務端字符集: select userenv(‘language‘) from dual or sele

[轉帖]Oracle字符集的檢視與修改 --- 還未嘗試 找個週六 試試. Oracle 字符集的檢視和修改

Oracle 字符集的檢視和修改 感謝原作者 改天試試 https://www.cnblogs.com/rootq/articles/2049324.html   一、什麼是Oracle字符集        Or

Oracle宣佈終止Java開發者大會JavaOne

Oracle 宣佈終止他們標誌性的 Java 開發者大會 JavaOne。這項活動自 1996 年開始(歸 Sun 所有)每年舉辦一次,自 2010 年開始作為 Oracle OpenWorld 大會的並置活動。 取而代之,Oracle 計劃舉辦一個有更多開發人員關注的 Oracle Code One

ORACLE字符集查詢和設定(11g)轉

ORACLE字符集查詢和設定(11g) 查詢資料庫字符集select userenv('language') from dual; linux中文字符集/etc/sysconfig/i18n LANG=zh_CN.gb18030 #oracle11g 修改字符集 修改為ZHS16GBKconn

ORACLE字符集查詢和設置(11g)轉

edi conf etc sel 服務器 media zhs16gbk art process 查詢數據庫字符集 select userenv(‘language‘) from dual; linux中文字符集/etc/sysconfig/i18n LANG=zh_CN.g

ORACLE字符集“ALU32UTF8”更改成“ZHS16GBK”

源連結:http://blog.csdn.net/fffygapl/article/details/7432501 在安裝ORACLE的時候,預設字符集為ALU32UTF8,如果需要更好的支援中文,建議字符集更改成“ZHS16GBK”,如果想不重新安裝資料庫的話,只有更改資料庫字元集了。

HTML實體字符集Java 字元

遇到了一個坑的問題: public static void main(String[] args) { // decodeUnicode("&#x4f60"); System.out.println( test("&#x4f60"));

Oracle字符集改變

 進入cmd進行如下操作 改變資料庫字符集: sql>conn / as sysdba 需要使用sysdba賬戶sql>startup mountsql>shutdown immediate; - -停止資料庫sql>startup mount -

Oracle 字符集的檢視和修改

       Oracle字符集是一個位元組資料的解釋的符號集合,有大小之分,有相互的包容關係。ORACLE 支援國家語言的體系結構允許你使用本地化語言來儲存,處理,檢索資料。它使資料庫工具,錯誤訊息,排序次序,日期,時間,貨幣,數字,和日曆自動適應本地化語言和平臺。

用generator 根據oracle表生成java程式碼,資料庫與程式碼欄位不一致

前兩天用generator生成java程式碼時發現,生成的javabean和資料庫裡的欄位對應不上,不是少幾個就是有幾個欄位不一樣,感覺很怪異,後來發現日誌裡邊這個錶轉換成bean是日誌列印了好幾遍,所有怪事都是有原因的,我開始研究generator原始碼。 用IDEA跟蹤

Oracle已對Java失去興趣?Java社群能否扭轉乾坤?

去年Oracle對Java傳教士進行裁員,更早前宣佈將暫時停止繼續為GlassFish Server釋出大型版本更新並對相關支援進行限制。坊間一時間流言四起:Oracle將要放棄Java?Java社群的明天會怎樣? 借Java EE守護者聯盟之力拯救

ireport連線Oracle字符集亂碼解決方案

ireport與oracle連線,資料來源連上了,可是取出的中文欄位都是亂碼 select userenv('language') from dual;   SIMPLIFIED CHINESE_CHINA.US7ASCII 通過查詢,字符集為us7ascii 解決辦法 :

oracle字符集亂碼及返回 REF CURSOR 的儲存過程執行問題

 關於oracle字符集亂碼問題: 1.OracleClient方式 存在亂碼問題。(比如:當Oracle資料庫伺服器端採用英文字符集比如 US7ASCII 時,客戶端不管字符集如何設定,讀出的中文都是亂碼;若伺服器端用中文字符集比如 ZHS16GBK ,則無亂碼問題。

編碼字符集JavaJava World亂碼問題根源之所在。

本文介紹了編碼字符集的概念以及Java與編碼字符集之間的關係,文章的內容來自於本人工作過程中的經驗積累以及網路中的相關文章介紹,如果文章中有任何紕漏歡迎讀者指正,讓我們共同討論學習J 1.字元 字元是抽象的最小文字單位。它沒有固定的形狀(可能是一個字形),而且沒有值。“A”是