java資料庫內存
㈠ Java如何創建bdb內存資料庫
(1)、Windows->Show View->Other…
(2)、選擇 Management->Data Source Explorer,點擊OK。
創建Driver
(1)、Window->Preferences
(2)、選擇Data Management->Driver Definitions
(3)、點擊Add。在Name/Type標簽頁中,選擇Generic JDBC Driver,並修改Driver name為:JDBC Driver。
在JAR List標簽頁中,加入h2-1.3.164.jar。
在Properties選項頁中,配置如下信息:
Connection URL:jdbc:h2:E:\DataBase\yht(路徑和文件名,可以自己設置)
Database Name:SAMPLE
Driver Class:org.h2.Driver
User ID:yht(資料庫用戶名,可以自己設置)
如下圖所示:
一路OK返回開發環境。
創建Connections
(1)、File->New->Other…
(2)、選擇Connection Profiles->Connection Profile。點擊Next。
(3)、選擇剛創建的Generic JDBC,並修改Name為:JDBC。點擊Next。
(4)、輸入密碼。第一次輸入的為密碼,點擊Test Connection,查看是否連接成功。
(5)、最後點擊Finish:
運行sql腳本
(1)、在環境中打開sql腳本,選擇創建的資料庫,如下圖。
(2)、右擊sql文件,選擇Execute All。
(3)、成功運行,如下圖所示:
獲取db格式文件
在路徑E:\DataBase\下獲取文件:yht.h2.db。
㈡ JAVA查詢資料庫出現內存溢出
讀取的時候內存不足了,你可以增大myeclipse的內存,在myeclise.ini裡面,調大各個屬性,然後你讀取的時候存對象里後,通過byte位元組來操作,用緩沖流,寫入到磁碟中。
㈢ java如何將從資料庫取出的數據預先存入到內存
我覺得你要實現的這個可能跟SpringMvc的關系不是很大。
你要達到的目的其實就是在jvm啟動的時候把資料庫數據載入一份到內存,一個靜態變數和一個靜態初始化塊就可以搞定你的問題,這兩者都是在類載入的時候初始化一次,像前面回答的一樣,你可以用一個HashMap搞定。
稍微具體來說,一個靜態變數
public static final Map<key,value> cache=new HashMap<key,value>()
static {
cache=請求資料庫操作
}
key你自己加,String還是int都行,value是你資料庫的結構,可以寫個實體。獲取的時候直接cache.get(key)就可以了。
㈣ 你好,java 向資料庫添加大量數據時內存溢出 在不改變內存的情況下如何解決 你當時是怎麼解決的
比如想將一個1000W數據的資料庫表,導出到文件;此時,你要麼進行分頁,oracle當然用三層包裝即可,mysql用limit,不過分頁每次都會新的查詢,而且隨著翻頁,會越來越慢,其實我們想拿到一個句柄,然後向下游動,編譯一部分數據(如10000行)將寫文件一次(寫文件細節不多說了,這個是最基本的),需要注意的時候每次buffer的數據,在用outputstream寫入的時候,最好flush一下,將緩沖區清空下;接下來,執行一個沒有where條件的SQL,會不會將內存撐爆?是的,這個問題我們值得去思考下,通過API發現可以對SQL進行一些操作,例如,通過:PreparedStatement statement = connection.prepareStatement(sql),這是默認得到的預編譯,還可以通過設置:PreparedStatement statement = connection.prepareStatement(sql , ResultSet.TYPE_FORWARD_ONLY , ResultSet.CONCUR_READ_ONLY);
來設置游標的方式,以至於游標不是將數據直接cache到本地內存,然後通過設置statement.setFetchSize(200);設置游標每次遍歷的大小;OK,這個其實我用過,oracle用了和沒用沒區別,因為oracle的jdbc API默認就是不會將數據cache到java的內存中的,而mysql里頭設置根本無效,我上面說了一堆廢話,呵呵,我只是想說,java提供的標准API也未必有效,很多時候要看廠商的實現機制,還有這個設置是很多網上說有效的,但是這純屬抄襲;對於oracle上面說了不用關心,他本身就不是cache到內存,所以java內存不會導致什麼問題,如果是mysql,首先必須使用5以上的版本,然後在連接參數上加上useCursorFetch=true這個參數,至於游標大小可以通過連接參數上加上:defaultFetchSize=1000來設置,例如:
jdbc:mysql://xxx.xxx.xxx.xxx:3306/abc?zeroDateTimeBehavior=convertToNull&useCursorFetch=true&defaultFetchSize=1000
上次被這個問題糾結了很久(mysql的數據老導致程序內存膨脹,並行2個直接系統就宕了),還去看了很多源碼才發現奇跡竟然在這里,最後經過mysql文檔的確認,然後進行測試,並行多個,而且數據量都是500W以上的,都不會導致內存膨脹,GC一切正常,這個問題終於完結了。
㈤ java如何將從資料庫取出的數據預先存入到內存
你要實現的這個可能跟SpringMvc的關系不是很大。
你要達到的目的其實就是在jvm啟動的時候把資料庫數據載入一份到內存,一個靜態變數和一個靜態初始化塊就可以搞定你的問題,這兩者都是在類載入的時候初始化一次,像前面回答的一樣,你可以用一個HashMap搞定。稍微具體來說,一個靜態變數
public static final Map<key,value> cache=new HashMap<key,value>()
static {
cache=請求資料庫操作
}
key你自己加,String還是int都行,value是你資料庫的結構,可以寫個實體。獲取的時候直接cache.get(key)就可以了。
㈥ JAVA 循環查詢資料庫,總提示內存溢出,不知道怎麼辦請高手幫忙
如果你的數據量非常大,肯定會內存溢出
你不停的Element dom是把xml載入到內存中的,數據量一多內存就不夠了,性能低下
建議你分頁查詢
然後通過Xstream等xml框架去生成xml
㈦ Java前提下, MySQL資料庫,一次性存儲大量數據導致內存溢出
內存溢出導致程序崩潰,也分是java層崩了,還是mysql崩了。
如果是java層崩了,注意不要一次性載入太多的數據到內存,並且不在使用的數據要徹底放棄引用關系。java雖然是自動回收,回收的原則就是一個對象不再被持有,即引用計數為零。如果數據太大,可考慮臨時文件。
如果是mysql崩了,首先增加配置緩存。一般來說mysql是不容易崩的,特別是插入操作的時候。查詢的時候如果查詢結果記錄集特別大,會導致一個查詢需要使用很大的內存空間,這種是有問題的。而插入操作都是一條一條的執行,不會導致大內存的使用。
如果僅僅是數據移植,也盡量不要用ORM框架,比如hibernate,mybatis這些東西,因為他們都有自己的緩存,直接使用JDBC比較好。
㈧ java相關 怎麼把資料庫的數據預先存入內存
記得之前的遠標老師教過我這一塊,問了一下。是這樣回答的
你創建一個servlet的時候,添加一個init()方法,init方法中執行查詢資料庫的方法,把數據導入內存。
默認情況下servlet被載入是在第一次請求訪問到來得時候,不過可以使用xml文件中配置
<load-on-startup>-1</load-on-startup>
是其在啟動tomcat服務的時候就載入servlet就可以了。
㈨ 對於普通的資料庫,有內存資料庫,比如Java DB(Derby)。是資料庫採用了內存資料庫就算用了內存資料庫
1 java DB 不是內存資料庫,時能夠管理TB級別數據的一個標准資料庫。
使用了內存資料庫,從語文角度也應理解,那就是使用了內存資料庫。。這還能怎麼解釋。
2 文件緩存和內存資料庫是完全不同的概念。你把文件讀取到內存中就是在內存了。你怎麼都是問這樣的問題。Scanner和InputStream和文件在哪沒關系,他只是讀取,從哪讀,是你設值的,你把文件先讀到內存里,他就從內存裡面讀,你把文件從硬碟讀,他就從硬碟讀。
㈩ 內存資料庫 用JAVA應該如何編寫
這玩意你要自己寫?
開源免費的
HSQLDB
Apache Derby
想寫的話研究人家的源碼吧