請問如何把物件存入資料庫後,再取出來? |
答題得分者是:neoart
|
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
之前發表一篇問題,想自己實作一個機制取代 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 發送簡訊給我 |
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 發送簡訊給我 |
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
|
pipp
一般會員 發表:2 回覆:21 積分:9 註冊:2003-10-22 發送簡訊給我 |
關於把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 發送簡訊給我 |
|
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
找到我想要的關鍵部分了,跟大家分享一下,跟我之前想的果然一樣,是有解的:
一、把任何物件轉成 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 發送簡訊給我 |
引言: 找到我想要的關鍵部分了,跟大家分享一下,跟我之前想的果然一樣,是有解的: 一、把任何物件轉成 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 發送簡訊給我 |
|
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
引言: 另一方面,有考慮把資料轉成純文字的方式(用分界字元來表示欄位關係)嗎? 這樣存取資料時,比較可以做到db無關的設計原則. 之所以不建議用bigblob,真的是每家的jdbc driver用法都不一樣. 而且要是你要倒資料的話,那就.......之前的確曾經有考慮 key-value 都用String 資料型態存入,但這樣彈性就變小了,因為實際的 session value 是 Object 型態的。 現在已經找到解法了,物件經過轉換後的 Base64 "字串",我想讀寫應該對效率來講影響不會很大,因為一個 client 只會對應一筆 record ! 所以我打算把自己的系統改成用 DB 來模擬 session 。 以上是我的結論啦,提供大家參考。 JackTasy
------
JackTasy |
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
引言: 之前的確曾經有考慮 key-value 都用String 資料型態存入,但這樣彈性就變小了,因為實際的 session value 是 Object 型態的。 現在已經找到解法了,物件經過轉換後的 Base64 "字串",我想讀寫應該對效率來講影響不會很大,因為一個 client 只會對應一筆 record ! 所以我打算把自己的系統改成用 DB 來模擬 session 。 以上是我的結論啦,提供大家參考。 JackTasyDear JackTasy: 這題是你自己找出答案的.我沒有幫上忙,麻煩你把這一個得分收回去吧. |
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
引言: Dear JackTasy: 這題是你自己找出答案的.我沒有幫上忙,麻煩你把這一個得分收回去吧.neoart 版主大大,你真是太客氣太有個性了。< > 第一、這篇已經變成分享了,我找不到也不知如何收回給分。 第二、版主這麼熱心在短時間就提供給我一些方向參考,讓我在找尋解答的同時也涉略、接觸了其他不同觀點角度的資源,雖然跟最後答案不太一樣,但對整體學習來說有絕對的助益,所以小弟認為這分給版主當之無愧。 第三、若版主堅決的話,還是尊重您啦,只是請告訴我方法,謝謝。< > JackTasy
------
JackTasy |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |