當前位置:首頁 » 數據倉庫 » java內存資料庫h2
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

java內存資料庫h2

發布時間: 2023-04-22 01:00:35

1. 什麼是H2資料庫

H2是Thomas Mueller提供的一個開源的、純java實現的關系資料庫。

H2是一個開源的嵌入式資料庫引擎,採用java語言編寫,不受平台的限制,同時H2提供了一個十分方便的web控制台用於操作和管理資料庫內容。H2還提供兼容模式,可以兼容一些主流的資料庫,因此採用H2作為開發期的資料庫非常方便。

H2最大的用途在於可以同應用程序打包在一起發布,這樣可以非常方便地存儲少量結構化數據。

它的另一個用途是用於單元測試。啟動速度快,而且可以關閉持久化功能,每一個用例執行完隨即還原到初始狀態。

H2的第三個用處是作為緩存,作為Nosql的一個補充。當某些場景下數據模型必須為關系型,可以拿它當Memcached使,作為後端MySQL/Oracle的一個緩沖層,緩存一些不經常變化但需要頻繁訪問的數據,比如字典表、許可權表。不過這樣系統架構就會比較復雜了。

(1)java內存資料庫h2擴展閱讀:

H2資料庫運行方式:

1、內存模式

資料庫只在內存中運行,關閉連接後資料庫將被清空,適合測試環境,連接字元串:jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1,如果不指定DBName,則以私有方式啟動,只允許一個連接。

2、嵌入式

資料庫持久化存儲為單個文件。連接字元串:jdbc:h2:file:~/.h2/DBName;AUTO_SERVER=TRUE。~/.h2/DBName表示資料庫文件的存儲位置,如果第一次連接則會自動創建資料庫。

3、服務模式

H2支持三種服務模式:web server:此種運行方式支持使用瀏覽器訪問H2 Console。

CP server:支持客戶端/伺服器端的連接方式。

PG server:支持PostgreSQL客戶端。

2. Java如何創建bdb內存資料庫

(1)、Windows->Show View->Other…

(2)、選擇Data 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。

3. 怎麼遠程訪問H2資料庫的內存模式

簡單來說就是用jdbc:h2:mem:h2db來建立內存模式,並建表,
然後jdbc:h2:tcp://192.168.20.141:8082/mem:h2db來訪問上面的內存資料庫

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.h2.tools.Server;

public class H2Demo {
private Server server;

private String port = "8082";
private static String sourceURL1 = "jdbc:h2:mem:h2db";
private static String sourceURL2 = "jdbc:h2:tcp://192.168.20.141:8082/mem:h2db";

private String user = "shorturl";
private String password = "123456";

public void startServer() {
try {
System.out.println("正在啟動h2...");
server = Server.createTcpServer(
new String[] { "-tcpPort", port }).start();
} catch (SQLException e) {
System.out.println("啟動h2出錯:" + e.toString());
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}

public void stopServer() {
if (server != null) {
System.out.println("正在關閉h2...");
server.stop();
System.out.println("關閉成功.");
}
}

public void useH2() {
try {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection(sourceURL1,user, password);
Statement stat = conn.createStatement();
// insert data
stat.execute("CREATE MEMORY Table TEST(NAME VARCHAR)");
stat.execute("INSERT INTO TEST VALUES('Hello World')");
//stat.execute("delete mappedURL");

// use data
ResultSet result = stat.executeQuery("select name from test ");
int i = 1;
while (result.next()) {
System.out.println(i++ + ":" + result.getString("name"));
}
result.close();
stat.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void useH2i() {
try {
Class.forName("org.h2.Driver");
//Connection conn = DriverManager.getConnection("jdbc:h2:" + dbDir+";AUTO_SERVER=TRUE;MVCC=TRUE",user, password);
Connection conn = DriverManager.getConnection(sourceURL2,user, password);
Statement stat = conn.createStatement();
// use data
ResultSet result = stat.executeQuery("select name from test");

4. 什麼是H2資料庫

H2是一個開源的、純Java實現的關系型資料庫。支持網路版和嵌入版本,另外還支持二者的混合應用。H2具有較好的兼容性,支持相當標準的sql標准。H2使用時非常簡單,只有一個jar文件,可以直接嵌入到應用項目中。

H2的優勢:

h2採用純Java編寫,因此不受平台的限制。只有一個jar文件,十分適合作為嵌入式資料庫試用,提供了一個十分方便的web控制台用於操作和管理資料庫內容。

(4)java內存資料庫h2擴展閱讀:

H2支持三種不同的運行模式,以適用於更多不燃培同的應用場景。

1、嵌入式模式:

嵌入式模式下,應用與H2運行於同一個JVM中,H2被應用啟動。該模式也是性能最好的模式,也是官方推薦的模式。

2、伺服器模式

伺服器模式下,H2被H2 Server啟動(獨立於應皮消唯用的JVM),應用與數據分離,應用使用遠程連接(如JDBC)訪問資料庫。類似於傳統資料庫的部署,伺服器可以與應用部署與同一台機器,也可以部署與另一台機器。

實際上,H2 Server本身也是使用嵌入式模式來啟橋配動運行H2 Database的。顯然,由於伺服器模式是通過遠程連接訪問數據,其性能也要低於嵌入式模式。

3、混合模式

該模式是嵌入式模式與混合模式的融合。一個應用啟動嵌入式模式的H2 Database,其他應用可以將其作為伺服器模式來遠程訪問。

5. H2創建內存資料庫伺服器,並啟動Web控制台

寫HelloWorld的方便工具做數判。依靠初始化腳本,數據隨時重置。交流起來,也方便。

maven

<dependency>

<groupId>com.h2database</groupId>

<artifactId>h2</artifactId>

<version>1.4.194</version>

</dependency>

web.xml中配置

<context-param>

<param-name>db.url</param-name>

<param-value>jdbc:h2:mem:test</param-value>

</context-param>

<context-param>

<param-name>db.user</畢嫌param-name>

<param-value>sa</param-value>

</context-param>

<context-param>

<param-name>db.password</param-name>

<param-value>sa</param-value>

</context-param>

<context-param>

<param-name>db.tcpServer</param-name>

<param-value>-tcpAllowOthers</param-value>

</context-param>

<listener>

<listener-class>org.h2.server.web.DbStarter</listener-class>

</listener>

<servlet>

<servlet-name>H2Console</servlet-name>

<servlet-class>純改org.h2.server.web.WebServlet</servlet-class>

<init-param><param-name>webAllowOthers</param-name><param-value></param-value></init-param>

<init-param><param-name>trace</param-name><param-value></param-value></init-param>

</servlet>

<servlet-mapping>

<servlet-name>H2Console</servlet-name>

<url-pattern>/h2/*</url-pattern>

</servlet-mapping>

6. h2創建資料庫語句

h2創建資料庫語句如下:
CREATE TABLE TEST AS SELECT * FROM CSVREAD('test.csv');//csv文件數據創建test表 CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255)) AS SELECT * FROM CSVREAD('test.csv');/創建test表,csv文件相應的列插入到test表相應的欄位

H2資料庫介紹
常用的開源資料庫:H2,Derby,HSQLDB,MySQL,PostgreSQL。其中H2,HSQLDB類似,十分適合作為嵌入式資料庫使用,其它的資料庫大部分都需要安裝獨立的客戶端和伺服器端。
H2的優勢:
1、h2採用純Java編寫,因此不受平台的限制。
2、h2隻有一個jar文件,十分適合作為嵌入式資料庫試用。
3、性能和功能的優勢
H2比HSQLDB的最大的優勢就是h2提供了一個十分方便的web控制台用於操作和管理資料庫內容,這點比起HSQLDB的swing和awt控制台實在好用多了。

7. JAVA的常用的類庫有哪些

一、日誌相關類庫

日誌庫是很常見的,因為你在每一個項目中都需要他們。列印日誌是伺服器端應用中最重要的事情,因為日誌是你了解你的程序發生了什麼的唯一途徑。盡管JDK附帶自己的日誌庫,但是還是有很多更好的選擇可用,例如 Log4j 、 SLF4j 和 LogBack。

Java開發人員應該熟悉日誌記錄的利弊, 並且了解為什麼SLF4J要比Log4J要好。

二、JSON解析庫

在當今世界的web服務和物聯網中(IoT),JSON已經取代了XML,成為從客戶端到伺服器傳送信息的首選協議。有一個好消息和一個壞消息。壞消息 是JDK沒有提供JSON庫。好消息是有許多優秀的第三方庫可以用來解析和創建JSON消息,如 Jackson 和 Gson

一個Java web開發人員應該熟悉Jackson 和 Gson這兩種中的至少一種庫。

三、單元測試庫

單元測試技術的使用,是區分一個一般的開發者和好的開發者的重要指標。程序員經常有各種借口不寫單元測試,但最常見的借口就是缺乏經驗和知識。常見的單測框架有 JUnit , Mockito 和PowerMock 。

《2020最新Java基礎精講視頻教程和學習路線!》


四、通用類庫

有幾個很好的第三方通用庫可供Java開發人員使用,例如 Apache Commons 和 Google Guava 。我會經常在我的代碼中使用這些通用類庫,因為這些類庫都是經過無數開發者實踐過的,無論是實用性還是在性能等方面都是最佳的。

五、Http 庫

我不是很喜歡JDK的一個重要原因就包括他們缺乏對HTTP的支持。雖然可以使用java.net包類,但是這和直接使用像 Apache HttpClient 和 HttpCore 等開源類庫比起來麻煩太多了。

盡管JDK 9將開始HTTP 2.0,也對HTTP的支持做了優化,但是我還是強烈建議所有的Java開發人員熟悉流行的HTTP處理類庫,例如HttpClient和HttpCore HTTP等庫。

六、XML解析庫

市面上有很多XML解析的類庫,如 Xerces , JAXB , JAXP , Dom4j , Xstream 等。 Xerces2是下一代高性能,完全兼容的XML解析工具。Xerces2定義了 Xerces Native Interface (XNI)規范,並提供了一個完整、兼容標準的 XNI 規范實現。該解析器是完全重新設計和實現的,更簡單以及模塊化。

七、Excel讀寫庫

許多應用程序需要提供把數據導出到Excel的功能,如果你要做相同的Java應用程序,那麼你需要 Apache POI API 。

這是一個非常豐富的類庫,你可以從Java程序讀寫XLS文件。

八、位元組碼庫

如果你正在編寫一個框架或者類庫。有一些受歡迎的位元組碼庫如 javassist 和 Cglib Nodep 可以供你選擇,他們可以讓你閱讀和修改應用程序生成的位元組碼。

Javassist使得JAVA位元組碼操作非常簡單。它是一個為編輯Java位元組碼而生的類庫。 ASM 是另一個有用的位元組碼編輯庫。

九、資料庫連接池庫

如果你的Java應用程序與資料庫交互不是使用資料庫連接池庫的話,那麼你就大錯特錯了。因為在運行時創建資料庫連接非常耗時並且會拖慢你的程序。所以牆裂建議使用,有些好用的連接池可供選擇,如 Commons Pool 和 DBCP 。

在web應用程序中,web伺服器通常提供了這些功能。但是在java項目中需要把資料庫連接池的類庫導入到應用中。

十、消息傳遞庫

像日誌和資料庫連接池一樣,消息傳遞也是很多實際的Java項目中必備的。Java提供了JMS Java消息服務,但這不是JDK的一部分,你需要單獨的引入jms.jar。類似地,如果您准備使用第三方消息傳遞協議, Tibco RV 是個不錯的選擇。

十一、PDF處理庫

除了Excel和Word,PDF也是一種常用的文件格式。如果你的應用程序要支持PDF格式的文件處理,你可以使用 iText 和 Apache FOP 類庫。兩者都提供了非常有用的PDF處理功能。

十二、日期和時間庫

在Java之前,JDK的日期和時間庫一直被人們所詬病,比如其非線程安全的、不可變的、容易出錯等。很多開發人員會選擇更好用的 JodaTime 類庫。

但是在Java8推出之後,我們就可以徹底放棄JodaTime了,因為Java 8提供了其所有功能。但是,如果你的代碼運行在一個低版本的JDK中,那麼JodaTime還是值得使用的。

十三、集合類庫

雖然JDK有豐富的集合類,但還是有很多第三方類庫可以提供更多更好的功能。如 Apache Commons Collections 、 Goldman Sachs collections 、 Google Collections 和 Trove 。Trove尤其有用,因為它提供所有標准Collections 類的更快的版本以及能夠直接在原語(primitive)(例如包含int 鍵或值的Map 等)上操作的Collections 類的功能。

FastUtil是另一個類似的API,它繼承了Java Collection Framework,提供了數種特定類型的容器,包括映射map、集合set、列表list、優先順序隊列(prority queue),實現了java.util包的標准介面(還提供了標准類所沒有的雙向迭代器),還提供了很大的(64位)的array、set、list,以及快速、實用的二進制或文本文件的I/O操作類。

十四、郵件API

javax.mail 和 Apache Commons Email 提供了發送郵件的api。它們建立在JavaMail API的基礎上,提供簡化的用法。

十五、HTML解析庫

和XML與JSON類似,HTML是另外一種我們可能要打交道的傳輸格式。值得慶幸的是,我們有jsoup可以大大簡化Java應用程序使用HTML。你不僅可以使用 JSoup 解析HTML還可以創建HTML文檔。

十六、加密庫

Apache Commons家族中的 Commons Codec 就提供了一些公共的編解碼實現,比如Base64, Hex, MD5,Phonetic and URLs等等。

十七、嵌入式SQL資料庫庫

我真的是非常喜歡像 H2 這種內存資料庫,他可以嵌入到你的Java應用中。在你跑單測的時候如果你需要一個資料庫,用來驗證你的SQL的話,他是個很好的選擇。順便說一句,H2不是唯一嵌入式DB,你還有 Apache Derby 和 HSQL 可供選擇。

十八、JDBC故障診斷庫

有不錯的JDBC擴展庫的存在使得調試變得很容易,例如P6spy,這是一個針對資料庫訪問操作的動態監測框架,它使得資料庫數據可無縫截取和操縱,而不必對現有應用程序的代碼作任何修改。 P6Spy 分發包包括P6Log,它是一個可記錄任何 Java 應用程序的所有JDBC事務的應用程序。其配置完成使用時,可以進行數據訪問性能的監測。

十九、序列化庫

Google Protocol Buffer是一種輕便高效的結構化數據存儲格式,可以用於結構化數據串列化,或者說序列化。它很適合做數據存儲或 RPC 數據交換格式。可用於通訊協議、數據存儲等領域的語言無關、平台無關、可擴展的序列化結構數據格式。目前提供了 C++、Java、Python 三種語言的 API。

二十、網路庫

一些有用的網路庫主要有 Netty 的和 Apache MINA 。如果您正在編寫一個應用程序,你需要做的底層網路任務,可以考慮使用這些庫。

這都是每位Java開發人員應該熟悉的,並且十分有用的庫。Java生態系統非常龐大的,你會發現有很多不同的類庫可以做不同的事情。每個你想到的東西,都可能有一個庫可以做到。

要相信,你遇到的問題,肯定不止你一個遇到過。
要相信,也許有很多人比你更勤奮。
要相信,你用或不用,輪子就在那裡。
要相信,使用這些類庫,你和你的代碼都會變得更好。

原文鏈接:https://blog.csdn.net/u011001084/article/details/79216958

8. h2資料庫比mysql快多少

快速是因為h2資料庫是內存資料庫,所以相對來說比Mysql會仔攜快速一些,可以用於測試,h2屬於關系型宴戚世資料庫,但是正式項目不適用於h2,會影響性能晌肢。

9. 如何用Java代碼後台啟動H2資料庫的內存模式有知道的嗎

packagetest;

importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;

importorg.h2.tools.Server;

publicclassH2Demo{
privateServerserver;
privateStringport="9094";
privateStringdbDir="./h2db/sample";
privateStringuser="zhoujiang";
privateStringpassword="123456";

publicvoidstartServer(){
try{
System.out.println("正在啟動h2...");
server=Server.createTcpServer(
newString[]{"-tcpPort",port}).start();
}catch(SQLExceptione){
System.out.println("啟動h2出錯:"+e.toString());
//TODOAuto-generatedcatchblock
e.printStackTrace();
thrownewRuntimeException(e);
}
}

publicvoidstopServer(){
if(server!=null){
System.out.println("正在關閉h2...");
server.stop();
System.out.println("關閉成功.");
}
}

publicvoiseH2(){
try{
Class.forName("org.h2.Driver");
Connectionconn=DriverManager.getConnection("jdbc:h2:"+dbDir,
user,password);
Statementstat=conn.createStatement();
//insertdata
stat.execute("CREATETABLETEST(NAMEVARCHAR)");
stat.execute("INSERTINTOTESTVALUES('HelloWorld')");

//usedata
ResultSetresult=stat.executeQuery("selectnamefromtest");
inti=1;
while(result.next()){
System.out.println(i+++":"+result.getString("name"));
}
result.close();
stat.close();
conn.close();
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}

publicstaticvoidmain(String[]args){
H2Demoh2=newH2Demo();
h2.startServer();
h2.useH2();
h2.stopServer();
System.out.println("==END==");
}
}

10. H2 Database 這個資料庫能用到真正的大型項目 生產環境嗎 , 一般java項目用到的內存資料庫用哪個呢

用來緩存消息的內存資料庫或Cache,需要滿足:
1.能快速方便的進行消息的查詢
2.能支持分布式 (網路模式)
3.能支持集群 (單點失效和負載均衡)
4. 支持持久化(自身能持久化, 不需要我們額外的開發)
SQLLite和Derby ,不過不是很確定這兩者是否都支撐集群,其他都支持,Derby是用純java寫的,集成在JDK6的安裝當中,現在叫JavaDB