眾所都知,數據庫事務及聯接在java操作中是一個昂貴的開銷,一些程序及效率的優化在這里有很大的優化空間,但感覺數據庫的開啟關閉好像沒有統一和最優的方案,

如上圖:假設AF為java中一次會話的過程,而bc和de表示java與數據庫操作占用的過程(當然在會話中可能存在不止兩次的數據庫操作),現在可能有下面幾種情況:
1),在A之前就開啟數據庫及事務,在F之后提交或回滾事務和斷開數據庫(這可能在有些架構中是這樣實現的,因為作為程序員不用考慮數據庫的聯接關閉及事務,統一由公用類完成)。
2),在b之時開啟在c之后斷開,在d之時又開啟,在e之后斷開,這也很常見,典型的用時開,用完就斷。
3),在b之時開啟,在F之后斷開,其實這種是跟第一種相同,只是一種改時罷了,因為我們可以確定在一次會話中第一次用數據庫,有人可能會說在e之后斷開不是更好,節省了ef過程的數據庫聯接開銷,理論上是這樣的,但是這是做不到的,因為我們不知道用了這次數據庫后在這次會話中就不會再用了,所以我們只能在f點結束后統一斷開及處理事務。
4),可能還有其它的方案是我不清楚的。
因此,我們可以看到在4方案沒有明確定義之前,只有2和3是可比較的,對于數據庫占有的時間來看,2方案是肯定優于3的,但是我們清楚數據庫的開啟及聯接本身也是一個比較大的開銷,就像一個電視機,多開些可能會浪費些電,但如果總是一開一關的話,電視機也容易壞。如要有一個統一的轉化參考標準:一次開銷代表多少,而占用的時間又代表多少,那么我們肯定可以選出一個最優方案來,但這看來是很難做到的(看來軟件的設計遠沒有種田來的實在啊).
個人感覺應該采取第3種方案,因為一些非數據庫的處理多半是內存中的處理及運算,應該很快(但話是不能絕對的,java的一些文件處理及遠程調用等可能也很慢)。
如在數據庫調用方面有何見解,望多探討,以上屬個人愚見,望能拋磚引玉。