H2數(shù)據(jù)庫入門

一椎椰、H2簡介

??1、H2是一個(gè)用Java開發(fā)的嵌入式數(shù)據(jù)庫令花,它本身只是一個(gè)類庫阻桅,可以直接嵌入到應(yīng)用項(xiàng)目中。
??H2最大的用途在于可以同應(yīng)用程序打包在一起發(fā)布兼都,這樣可以非常方便地存儲少量結(jié)構(gòu)化數(shù)據(jù)嫂沉。
??它的另一個(gè)用途是用于單元測試。啟動(dòng)速度快扮碧,而且可以關(guān)閉持久化功能趟章,每一個(gè)用例執(zhí)行完隨即還原到初始狀態(tài)。
??H2的第三個(gè)用處是作為緩存慎王,作為NoSQL的一個(gè)補(bǔ)充蚓土。當(dāng)某些場景下數(shù)據(jù)模型必須為關(guān)系型,可以拿它當(dāng)Memcached使赖淤,作為后端MySQL/Oracle的一個(gè)緩沖層蜀漆,緩存一些不經(jīng)常變化但需要頻繁訪問的數(shù)據(jù),比如字典表咱旱、權(quán)限表确丢。不過這樣系統(tǒng)架構(gòu)就會比較復(fù)雜了绷耍。
??2、H2的產(chǎn)品優(yōu)勢:
??純Java編寫鲜侥,不受平臺的限制褂始;
??只有一個(gè)jar文件,適合作為嵌入式數(shù)據(jù)庫使用描函;
??h2提供了一個(gè)十分方便的web控制臺用于操作和管理數(shù)據(jù)庫內(nèi)容;
??功能完整舀寓,支持標(biāo)準(zhǔn)SQL和JDBC。麻雀雖小五臟俱全基公;
??支持內(nèi)嵌模式、服務(wù)器模式和集群轰豆。

二胰伍、下載和安裝

??1、下載骂租,H2數(shù)據(jù)庫下載地址:http://www.h2database.com/html/download.html
??解壓縮后的目錄結(jié)構(gòu):
????h2
????|---bin
????|??|---h2-1.4.199.jar????// H2數(shù)據(jù)庫的jar包(驅(qū)動(dòng)也在里面)
????|??|---h2.bat????// Windows控制臺啟動(dòng)腳本
????|??|---h2.sh????// Linux控制臺啟動(dòng)腳本
????|??|---h2w.bat????// Windows控制臺啟動(dòng)腳本(不帶黑屏窗口)
????|---docs????// H2數(shù)據(jù)庫的幫助文檔(內(nèi)有H2數(shù)據(jù)庫的使用手冊)
????|---service????// 通過wrapper包裝成服務(wù)渗饮。
????|---src????// H2數(shù)據(jù)庫的源代碼
????|---build.bat????// windows構(gòu)建腳本
????|---build.sh????// linux構(gòu)建腳本
??此時(shí)就算“安裝”完成了。

三宿刮、運(yùn)行模式與運(yùn)行方式

??(一)運(yùn)行模式
??H2有三種運(yùn)行模式互站。
??1、內(nèi)嵌模式(Embedded Mode)
??內(nèi)嵌模式下僵缺,應(yīng)用和數(shù)據(jù)庫同在一個(gè)JVM中磕潮,通過JDBC進(jìn)行連接翠胰∽愿可持久化,但同時(shí)只能一個(gè)客戶端連接锻狗。內(nèi)嵌模式性能會比較好。
??2、服務(wù)器模式(Server Mode):使用服務(wù)器模式和內(nèi)嵌模式一樣脚囊,只不過它可以跑在另一個(gè)進(jìn)程里桐磁。
??3讲岁、混合模式
??第一個(gè)應(yīng)用以內(nèi)嵌模式啟動(dòng)它,對于后面的應(yīng)用來說它是服務(wù)器模式跑著的缓艳。混合模式是內(nèi)嵌模式和服務(wù)器模式的組合衙吩。第一個(gè)應(yīng)用通過內(nèi)嵌模式與數(shù)據(jù)庫建立連接溪窒,同時(shí)也作為一個(gè)服務(wù)器啟動(dòng),于是另外的應(yīng)用(運(yùn)行在不同的進(jìn)程或是虛擬機(jī)上)可以同時(shí)訪問同樣的數(shù)據(jù)澈蚌。第一個(gè)應(yīng)用的本地連接與嵌入式模式的連接性能一樣的快,而其它連接理論上會略慢浮禾。

??(二)連接方式
??1份汗、以嵌入式(本地)連接方式連接H2數(shù)據(jù)庫
??這種連接方式默認(rèn)情況下只允許有一個(gè)客戶端連接到H2數(shù)據(jù)庫,有客戶端連接到H2數(shù)據(jù)庫之后杯活,此時(shí)數(shù)據(jù)庫文件就會被鎖定,那么其他客戶端就無法再連接了卷扮。
??連接語法:jdbc:h2:[file:][<path>]<databaseName>
??例如:
????jdbc:h2:~/test????//?連接位于用戶目錄下的test數(shù)據(jù)庫
????jdbc:h2:file:/data/sample
????jdbc:h2:file:E:/H2/gacl(Windows only)
??2、使用TCP/IP的服務(wù)器模式(遠(yuǎn)程連接)方式連接H2數(shù)據(jù)庫(推薦)
??這種連接方式就和其他數(shù)據(jù)庫類似了晤锹,是基于Service的形式進(jìn)行連接的彤委,因此允許多個(gè)客戶端同時(shí)連接到H2數(shù)據(jù)庫。
??連接語法:jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
??范例:jdbc:h2:tcp://localhost/~/test
??3、H2數(shù)據(jù)庫的內(nèi)存模式
??(1)封断、H2數(shù)據(jù)庫被稱為內(nèi)存數(shù)據(jù)庫舶担,因?yàn)樗С衷趦?nèi)存中創(chuàng)建數(shù)據(jù)庫和表。
??(2)衣陶、注意:如果使用H2數(shù)據(jù)庫的內(nèi)存模式,那么我們創(chuàng)建的數(shù)據(jù)庫和表都只是保存在內(nèi)存中教沾,一旦服務(wù)器重啟译断,那么內(nèi)存中的數(shù)據(jù)庫和表就不存在了。

四堪唐、實(shí)例

1该贾、使用Maven項(xiàng)目的依賴。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

2杨蛋、H2數(shù)據(jù)庫的操作與mysql的類似。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * @Description: 內(nèi)嵌數(shù)據(jù)庫H2的使用
 * @author: zxt
 * @time: 2019年6月4日 下午3:30:13
 */
public class H2Test {
    
    /**
     * 以嵌入式(本地)連接方式連接H2數(shù)據(jù)庫
     */
    private static final String JDBC_URL = "jdbc:h2:E:/Java/H2Test/user";

    /**
     * 使用TCP/IP的服務(wù)器模式(遠(yuǎn)程連接)方式連接H2數(shù)據(jù)庫(推薦)
     */
    // private static final String JDBC_URL = "jdbc:h2:tcp://10.35.14.122/C:/H2/user";

    private static final String USER = "root";
    private static final String PASSWORD = "root";
    private static final String DRIVER_CLASS = "org.h2.Driver";

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Class.forName(DRIVER_CLASS);
        Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);
        Statement statement = conn.createStatement();
        statement.execute("DROP TABLE IF EXISTS USER_INF");
        statement.execute("CREATE TABLE USER_INF(id INTEGER PRIMARY KEY, name VARCHAR(100), sex VARCHAR(2))");

        statement.executeUpdate("INSERT INTO USER_INF VALUES(1, 'tom', '男') ");
        statement.executeUpdate("INSERT INTO USER_INF VALUES(2, 'jack', '女') ");
        statement.executeUpdate("INSERT INTO USER_INF VALUES(3, 'marry', '男') ");
        statement.executeUpdate("INSERT INTO USER_INF VALUES(4, 'lucy', '男') ");

        ResultSet resultSet = statement.executeQuery("select * from USER_INF");

        while (resultSet.next()) {
            System.out.println(
                    resultSet.getInt("id") + ", " + resultSet.getString("name") + ", " + resultSet.getString("sex"));
        }

        statement.close();
        conn.close();
    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市举庶,隨后出現(xiàn)的幾起案子揩抡,更是在濱河造成了極大的恐慌,老刑警劉巖峦嗤,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁设,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弓熏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門糠睡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滞谢,你說我怎么就攤上這事除抛∧附兀” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵喘漏,是天一觀的道長华烟。 經(jīng)常有香客問我,道長盔夜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任返十,我火速辦了婚禮椭微,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝇率。我一直安慰自己,他們只是感情好排拷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布间狂。 她就那樣靜靜地躺著,像睡著了一般忙菠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牛欢,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音隔盛,去河邊找鬼拾稳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛访得,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鳄炉,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼搜骡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谈竿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤榕订,失蹤者是張志新(化名)和其女友劉穎蜕便,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體两嘴,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡族壳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贰您。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舶替,死狀恐怖杠园,靈堂內(nèi)的尸體忽然破棺而出顾瞪,到底是詐尸還是另有隱情抛蚁,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布钉跷,位于F島的核電站肚逸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吼虎。R本人自食惡果不足惜苍鲜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一混滔、第九天 我趴在偏房一處隱蔽的房頂上張望洒疚。 院中可真熱鬧坯屿,春花似錦、人聲如沸领跛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矢棚。三九已至,卻和暖如春蒲肋,著一層夾襖步出監(jiān)牢的瞬間钝满,已是汗流浹背申窘。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熟吏,地道東北人玄窝。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像恩脂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子黎休,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,320評論 0 85
  • 你們在開發(fā)中是否遇到過這樣的場景势腮,需要數(shù)據(jù)存儲漫仆,但是又沒有必要部署專門的數(shù)據(jù)存儲服務(wù),這是可以使用一種內(nèi)嵌式的h2...
    小草莓子桑閱讀 9,686評論 0 24
  • H2是一個(gè)開源的嵌入式數(shù)據(jù)庫引擎署照,采用java語言編寫,不受平臺的限制建芙,同時(shí)H2提供了一個(gè)十分方便的web控制臺用...
    西漠閱讀 41,886評論 0 24
  • JDBC基礎(chǔ)知識 一懂扼、采用JDBC訪問數(shù)據(jù)庫的基本步驟: A.載入JDBC驅(qū)動(dòng)程序 B.定義連接URL ...
    java日記閱讀 3,844評論 0 20
  • 20180316(51/60) 【幸福實(shí)修目標(biāo)】覺知去感悟每時(shí)每事每人,帶著過去屡限,立足于現(xiàn)在炕倘,朝向未來钧大,我可以做些...
    你謝謝閱讀 343評論 0 1