全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2178
推到 Plurk!
推到 Facebook!

請問如何把物件存入資料庫後,再取出來?

答題得分者是:neoart
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-26 11:21:50 IP:61.220.xxx.xxx 未訂閱
之前發表一篇問題,想自己實作一個機制取代 WebContainer Session 機制。解決方法有二: 1.把 session 存入 File 裡再取出。 2.把 session 存入 DB 後再取出。    第一個寫入檔案的方法技術部分我已經 try ok 了,是利用 ObjectOuputStream 搭配 FileOuputStream 實作 Serialization 物件序列化。 但第二個要存入 DB 的方法讓我百思不得其門而入,望各方高手指點一二。    我把問題簡單化好了,如何把 myHashMapObject 這個物件存入某資料庫欄位,之後還可以從資料庫取出來還原整個物件原貌呢? 利用什麼 API 實作? 又資料庫欄位型態定義如何呢?    ps:曾經想過把序列化後 toByteArray 存成 String 存入資料庫,但不會讀出來,且讀出來的是字串又不知可否、如何還原...    謝謝!         JackTasy
------
JackTasy
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-26 11:52:46 IP:61.64.xxx.xxx 未訂閱
bigblob物件的存取方式,要視你的db的型態來決定. 大部分都是在他的help或是document中可以找到,如: http://www.javaworld.com.tw/jute/post/view?bid=21&id=2217&sty=1&tpg=1&age=-1 或是 http://www.php5.idv.tw/documents/pgsqldoc-7.3tw/jdbc-ext.html (大物件章節) mySQL: http://www.javaworld.com.tw/jute/post/view?bid=21&id=63963&sty=0&tpg=1&ppg=1&age=-1#63963 原則上.如果每次update都要把整個物件都進出資料庫的話.那真的是很傷效能,要好好考慮一下.
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-26 14:12:01 IP:61.220.xxx.xxx 未訂閱
引言: 原則上.如果每次update都要把整個物件都進出資料庫的話.那真的是很傷效能,要好好考慮一下.
謝謝 neoart 前輩指點。 不過若真要實作 WebFarm 架構的話,勢必必須把 session 存入 DB or File 裡,別無他法,只是要再測試看看哪一個效能較佳做抉擇罷了。難怪孫講師在演講時強調多次,WebContainer 的機器可以爛一點,DB Server 機器一定要好一點。 看了第三個連結範例是把 >
------
JackTasy
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-26 15:15:18 IP:61.64.xxx.xxx 未訂閱
可以考慮自己設計一套resultset轉成serializable資料的方式 以便直接與db轉換 (參考:【JAVA】【討論】拋磚引玉篇:資料結構導向還是物件導向合適? 之內容) 另一方面,有考慮把資料轉成純文字的方式(用分界字元來表示欄位關係)嗎? 這樣存取資料時,比較可以做到db無關的設計原則. 之所以不建議用bigblob,真的是每家的jdbc driver用法都不一樣. 而且要是你要倒資料的話,那就.......
pipp
一般會員


發表:2
回覆:21
積分:9
註冊:2003-10-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-26 16:20:06 IP:61.220.xxx.xxx 未訂閱
關於把session 寫下來檔案,你可以參考tomcat的Server.xml, 底下有這一段設定檔,上面也有簡單說明~~他是拿來維持Session的, Server 重開也會讀回來 可以參考一下,tomcat也有source code     

  

引言: 之前發表一篇問題,想自己實作一個機制取代 WebContainer Session 機制。解決方法有二: 1.把 session 存入 File 裡再取出。 2.把 session 存入 DB 後再取出。 第一個寫入檔案的方法技術部分我已經 try ok 了,是利用 ObjectOuputStream 搭配 FileOuputStream 實作 Serialization 物件序列化。 但第二個要存入 DB 的方法讓我百思不得其門而入,望各方高手指點一二。 我把問題簡單化好了,如何把 myHashMapObject 這個物件存入某資料庫欄位,之後還可以從資料庫取出來還原整個物件原貌呢? 利用什麼 API 實作? 又資料庫欄位型態定義如何呢? ps:曾經想過把序列化後 toByteArray 存成 String 存入資料庫,但不會讀出來,且讀出來的是字串又不知可否、如何還原... 謝謝! JackTasy
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-26 23:20:42 IP:211.76.xxx.xxx 未訂閱
剛剛在 JSPWidget 逛了一整個晚上,終於被我找到了,且還有 Source Code,那裡真是個寶山非短時間能消化完....待我研究一下  有興趣的人可以到 >
------
JackTasy
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-26 23:55:04 IP:211.76.xxx.xxx 未訂閱
找到我想要的關鍵部分了,跟大家分享一下,跟我之前想的果然一樣,是有解的: 一、把任何物件轉成 Base64 String:   String sBase64 = Base64.encodeObject(myHashTableObject); 二、從 Base64 String 還原成原本的 Object:   Object o = Base64.decodeToObject("aStringName");    重點就在於 Base64 這個 Class! 看起來應該是個國外高手寫的共 1438 行程式碼,跟我想的不一樣的是無法用內定簡單幾個 API or method 就完成。(如 Serialization or HashCode 那樣)    
------
JackTasy
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-27 00:01:03 IP:61.56.xxx.xxx 未訂閱
引言: 找到我想要的關鍵部分了,跟大家分享一下,跟我之前想的果然一樣,是有解的: 一、把任何物件轉成 Base64 String: String sBase64 = Base64.encodeObject(myHashTableObject); 二、從 Base64 String 還原成原本的 Object: Object o = Base64.decodeToObject("aStringName"); 重點就在於 Base64 這個 Class! 看起來應該是個國外高手寫的共 1438 行程式碼,跟我想的不一樣的是無法用內定簡單幾個 API or method 就完成。(如 Serialization or HashCode 那樣) >< face="Verdana, Arial, Helvetica"> 恭喜恭喜.看樣子可以請你當版主接棒人了,看時間,也該是java版世代交替的時候了. (我要去當VC 的菜鳥了) 發表人 - neoart 於 2004/08/27 00:03:02
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-27 00:11:46 IP:211.76.xxx.xxx 未訂閱
引言: 恭喜恭喜.看樣子可以請你當版主接棒人了,看時間,也該是java版世代交替的時候了. (我要去當VC 的菜鳥了) 發表人 - neoart 於 2004/08/27 00:03:02
艾呀,版主大人愛說笑了,我 java 功力還差遠的勒 其實我比較擅長的是 >
------
JackTasy
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-27 00:18:03 IP:211.76.xxx.xxx 未訂閱
引言: 另一方面,有考慮把資料轉成純文字的方式(用分界字元來表示欄位關係)嗎? 這樣存取資料時,比較可以做到db無關的設計原則. 之所以不建議用bigblob,真的是每家的jdbc driver用法都不一樣. 而且要是你要倒資料的話,那就.......
之前的確曾經有考慮 key-value 都用String 資料型態存入,但這樣彈性就變小了,因為實際的 session value 是 Object 型態的。 現在已經找到解法了,物件經過轉換後的 Base64 "字串",我想讀寫應該對效率來講影響不會很大,因為一個 client 只會對應一筆 record ! 所以我打算把自己的系統改成用 DB 來模擬 session 。 以上是我的結論啦,提供大家參考。 JackTasy
------
JackTasy
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-08-27 09:25:02 IP:61.64.xxx.xxx 未訂閱
引言: 之前的確曾經有考慮 key-value 都用String 資料型態存入,但這樣彈性就變小了,因為實際的 session value 是 Object 型態的。 現在已經找到解法了,物件經過轉換後的 Base64 "字串",我想讀寫應該對效率來講影響不會很大,因為一個 client 只會對應一筆 record ! 所以我打算把自己的系統改成用 DB 來模擬 session 。 以上是我的結論啦,提供大家參考。 JackTasy
Dear JackTasy: 這題是你自己找出答案的.我沒有幫上忙,麻煩你把這一個得分收回去吧.
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-08-27 09:44:33 IP:61.220.xxx.xxx 未訂閱
引言: Dear JackTasy: 這題是你自己找出答案的.我沒有幫上忙,麻煩你把這一個得分收回去吧.
neoart 版主大大,你真是太客氣太有個性了。< > 第一、這篇已經變成分享了,我找不到也不知如何收回給分。 第二、版主這麼熱心在短時間就提供給我一些方向參考,讓我在找尋解答的同時也涉略、接觸了其他不同觀點角度的資源,雖然跟最後答案不太一樣,但對整體學習來說有絕對的助益,所以小弟認為這分給版主當之無愧。 第三、若版主堅決的話,還是尊重您啦,只是請告訴我方法,謝謝。< > JackTasy
------
JackTasy
系統時間:2024-04-27 19:43:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!