<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 2, comments - 27, trackbacks - 0, articles - 60
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    JavaDB數(shù)據(jù)庫(kù)使用筆記

    Posted on 2017-01-10 10:48 ZhouFeng 閱讀(3280) 評(píng)論(0)  編輯  收藏 所屬分類: 原創(chuàng)JAVA 、DataBase
    在做一些小的應(yīng)用系統(tǒng)時(shí),用過(guò)嵌入式數(shù)據(jù)庫(kù),使用過(guò)HSQLDB,這個(gè)比較小巧,在做了幾個(gè)應(yīng)用之后覺(jué)得挺好用的,因?yàn)閿?shù)據(jù)量不多,也能夠滿足要求,也就在嵌入式數(shù)據(jù)庫(kù)這條路上越走越遠(yuǎn)了。
    在JAVA里也有一個(gè)嵌入式數(shù)據(jù)庫(kù),也想嘗試著用一下,便有了下面這篇日志。在安裝jdk的時(shí)候會(huì)提示安裝一個(gè)數(shù)據(jù)庫(kù),如果勾選的話,則會(huì)在安裝Java嵌入式數(shù)據(jù)庫(kù)JavaDB,在JAVA_HOME目錄下多出一個(gè)db的目錄(在jdk6版本里目錄名為JavaDB),里面就是與數(shù)據(jù)庫(kù)有關(guān)的文件了,如果安裝jdk時(shí)沒(méi)有選擇安裝,可以在官網(wǎng)http://db.apache.org/derby/derby_downloads.html上下載解壓即可,經(jīng)過(guò)了一段時(shí)間的摸索,現(xiàn)小結(jié)如下。

    1.配置環(huán)境變量

    在使用之前,需要配置環(huán)境變量DERBY_HOME指向db所在目錄,本機(jī)JAVA_HOME為G:\Java\jdk1.8.0_73,則DERBY_HOME應(yīng)該配置為G:\Java\jdk1.8.0_73\db,或%JAVA_HOME%\db,如果希望后面在命令行里用起來(lái)方便點(diǎn),也可以將%DERBY_HOME%\db\bin添加到path里去

    2.目錄介紹

    在DERBY_HOME目錄下有兩個(gè)目錄bin和lib
    bin:存放執(zhí)行批處理文件,用于查看,啟動(dòng)和停止數(shù)據(jù)庫(kù)的腳本
    lib:存放所用到的jar包
    bin目錄下有幾個(gè)主要的文件,有兩個(gè)不同的方式,沒(méi)有.bat后綴的文件為L(zhǎng)inux平臺(tái)下運(yùn)行的腳本,bat文件為Windows平臺(tái)使用的批處理
    dblook:用于查看數(shù)據(jù)庫(kù)的基本信息及DDL語(yǔ)句
    ij:命令行客戶端程序,提供與數(shù)據(jù)庫(kù)的交互
    NetworkServerControl:提供網(wǎng)絡(luò)服務(wù),主要被startNetworkServer和stopNetworkServer調(diào)用
    startNetworkServer:啟動(dòng)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)模式,開(kāi)啟監(jiān)聽(tīng)
    stopNetworkServer:關(guān)閉網(wǎng)絡(luò)數(shù)據(jù)庫(kù)模式,停止監(jiān)聽(tīng)
    sysinfo:查看當(dāng)前系統(tǒng)信息,可用于檢測(cè)數(shù)據(jù)庫(kù)是否正確安裝
    幾個(gè)以CP結(jié)束的批處理,主要用于在不同模式下設(shè)置CLASSPATH用的,如果把lib目錄下的jar文件添加到CLASSPATH中,就可以不用通過(guò)執(zhí)行批處理來(lái)設(shè)置CLASSPATH了

    3.用命令行方式開(kāi)啟數(shù)據(jù)庫(kù)

    G:\Java\jdk1.8.0_73\db\bin>ij
    ij 版本 10.11
    ij> connect 'jdbc:derby:mydb;create=true';
    加上create=true表明如果庫(kù)mydb不存在,則創(chuàng)建,數(shù)據(jù)庫(kù)文件存放位置為當(dāng)前目錄,接下來(lái)創(chuàng)建一個(gè)表,可以把三個(gè)字段定義信息寫(xiě)在一行里面,結(jié)束時(shí)要加分號(hào)
    ij> create table stu(id int not null generated by default as identity,
    > stuname varchar(20),
    > email varchar(30));
    已插入/更新/刪除 0 行
    向表中寫(xiě)入一條記錄,并進(jìn)行查詢
    ij> insert into stu(stuname,email) values('Tom','tom@test.com');
    已插入/更新/刪除 1 行
    ij> select * from stu;
    ID         |STUNAME             |EMAIL
    ---------------------------------------------------------------
    1          |Tom                 |tom@test.com

    已選擇 1 行
    退出命令行狀態(tài)
    ij> exit;
    重新進(jìn)入命令行方式,進(jìn)行數(shù)據(jù)驗(yàn)證
    G:\Java\jdk1.8.0_73\db\bin>ij
    ij 版本 10.11
    ij> connect 'jdbc:derby:mydb';
    ij> select * from stu;
    ID         |STUNAME             |EMAIL
    ---------------------------------------------------------------
    1          |Tom                 |tom@test.com

    已選擇 1 行
    查看當(dāng)前表結(jié)構(gòu)可以用describe <表名>
    ij> describe stu;
    COLUMN_NAME         |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
    ------------------------------------------------------------------------------
    ID                  |INTEGER  |0   |10  |10    |GENERATED&|NULL      |NO
    STUNAME             |VARCHAR  |NULL|NULL|20    |NULL      |40        |YES
    EMAIL               |VARCHAR  |NULL|NULL|30    |NULL      |60        |YES

    已選擇 3 行
    ij>
    這是在命令行方式下的基本使用

    4.在Java工程中使用JavaDB

    在Eclipse中創(chuàng)建一個(gè)Java工程,導(dǎo)入derby.jar包,代碼如下
    package com.db;

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

    public class EmbedDB {

        private static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
        private static String protocol = "jdbc:derby:db3;create=true"; // 在工程目錄下創(chuàng)建數(shù)據(jù)庫(kù)
        
    // private static String protocol = "jdbc:derby:db/db3;create=true";    //在工程目錄下db目錄中創(chuàng)建數(shù)據(jù)庫(kù)
        
    // private static String protocol = "jdbc:derby:D:/mydbs/db3;create=true";    //在D:/mydbs/目錄下創(chuàng)建數(shù)據(jù)庫(kù)

        public static void main(String[] args) {
            try {
                Class.forName(driver).newInstance();
                System.out.println("Loaded the appropriate driver");
                Connection conn = DriverManager.getConnection(protocol);
                Statement stmt = conn.createStatement();
                stmt.executeUpdate("create table stu(id int not null generated by default as identity,stuname varchar(20),email varchar(30))");

                for (String str : "one,two,three,four,five".split(",")) {
                    String sql = "insert into stu(stuname,email) values('" + str + "','" + str + "@test.com')";
                    System.out.println(sql);
                    stmt.addBatch(sql);
                }
                stmt.executeBatch();
                System.out.println("insert over");
                conn.commit();

                stmt.close();
                conn.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    運(yùn)行結(jié)果
    Loaded the appropriate driver
    insert into stu(stuname,email) values('one','one@test.com')
    insert into stu(stuname,email) values('two','two@test.com')
    insert into stu(stuname,email) values('three','three@test.com')
    insert into stu(stuname,email) values('four','four@test.com')
    insert into stu(stuname,email) values('five','five@test.com')
    insert over

    5.網(wǎng)絡(luò)數(shù)據(jù)庫(kù)模式

    JavaDB是跑在JVM中的,如果此時(shí)再開(kāi)啟一個(gè)新的窗口,打開(kāi)當(dāng)前數(shù)據(jù)庫(kù),會(huì)報(bào)錯(cuò),如果希望有多個(gè)客戶端連接,如開(kāi)發(fā)階段,一邊在Eclipse里運(yùn)行程序,一邊在命令行里查看數(shù)據(jù)記錄,這種情況就可以使用JavaDB的網(wǎng)絡(luò)啟動(dòng)模式
    G:\Java\jdk1.8.0_73\db\bin>startNetworkServer
    Tue Jan 10 09:10:54 CST 2017 : 已使用基本服務(wù)器安全策略安裝了 Security Manager。
    Tue Jan 10 09:11:04 CST 2017 : Apache Derby 網(wǎng)絡(luò)服務(wù)器 - 10.11.1.2 - (1629631) 已啟動(dòng)并準(zhǔn)備接受端口 1527 上的連接
    表示當(dāng)前窗口正在監(jiān)聽(tīng),即網(wǎng)絡(luò)服務(wù)已開(kāi)啟
    查看數(shù)據(jù)庫(kù)的基本情況可以用dblook
    G:\Java\jdk1.8.0_73\db\bin>dblook -d 'jdbc:derby://localhost:1527/mydb'
    -- 時(shí)間戳記:2017-01-10 09:18:30.232
    -- 源數(shù)據(jù)庫(kù)為:mydb
    -- 連接 URL 為:jdbc:derby://localhost:1527/mydb
    -- appendLogs: false

    -- ----------------------------------------------
    -- 表的 DDL 語(yǔ)句
    -- ----------------------------------------------

    CREATE TABLE "APP"."STU" ("ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), "STUNAME" VARCHAR(20), "EMAIL" VARCHAR(30));
    以命令行方式進(jìn)行數(shù)據(jù)庫(kù)連接并測(cè)試
    G:\Java\jdk1.8.0_73\db\bin>ij
    ij 版本 10.11
    ij> connect 'jdbc:derby://localhost:1527/mydb'
    ij> show tables in app;
    TABLE_SCHEM         |TABLE_NAME                    |REMARKS
    ------------------------------------------------------------------------
    APP                 |STU                           |

    已選擇 1 行
    ij> select * from stu;
    ID         |STUNAME             |EMAIL
    ---------------------------------------------------------------
    1          |Tom                 |tom@test.com

    已選擇 1 行
    ij>
    此時(shí)也可以在Eclipse中使用Java程序進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn),需要加載derbyclient.jar包,代碼如下
    package com.db;

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

    public class ClientDB {

        private static String driver = "org.apache.derby.jdbc.ClientDriver";
        private static String protocol = "jdbc:derby://localhost:1527/mydb";

        public static void main(String[] args) {
            try {
                Class.forName(driver).newInstance();
                System.out.println("Loaded the appropriate driver");
                Connection conn = DriverManager.getConnection(protocol);
                Statement stmt = conn.createStatement();
                for (int i = 1; i < 10; i++) {
                    String sql = "insert into stu(stuname,email) values('user" + i + "','user" + i + "@test.com')";
                    System.out.println(sql);
                    stmt.addBatch(sql);
                }
                stmt.executeBatch();
                System.out.println("insert over");
                conn.commit();

                stmt.close();
                conn.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    控制以輸出結(jié)果為
    Loaded the appropriate driver
    insert into stu(stuname,email) values('user1','user1@test.com')
    insert into stu(stuname,email) values('user2','user2@test.com')
    insert into stu(stuname,email) values('user3','user3@test.com')
    insert into stu(stuname,email) values('user4','user4@test.com')
    insert into stu(stuname,email) values('user5','user5@test.com')
    insert into stu(stuname,email) values('user6','user6@test.com')
    insert into stu(stuname,email) values('user7','user7@test.com')
    insert into stu(stuname,email) values('user8','user8@test.com')
    insert into stu(stuname,email) values('user9','user9@test.com')
    insert over
    此時(shí)查看數(shù)據(jù)庫(kù)內(nèi)容為
    ij> select * from stu;
    ID         |STUNAME             |EMAIL
    ---------------------------------------------------------------
    1          |Tom                 |tom@test.com
    2          |user1               |user1@test.com
    3          |user2               |user2@test.com
    4          |user3               |user3@test.com
    5          |user4               |user4@test.com
    6          |user5               |user5@test.com
    7          |user6               |user6@test.com
    8          |user7               |user7@test.com
    9          |user8               |user8@test.com
    10         |user9               |user9@test.com

    已選擇 10 行
    ij>

    小結(jié)

    終于學(xué)習(xí)了JavaDB,又嘗試了一種嵌入式數(shù)據(jù)庫(kù),在做一些小項(xiàng)目或是應(yīng)用演示時(shí)很方便。在了解過(guò)JavaDB后,覺(jué)得JavaDB也是個(gè)不錯(cuò)的選擇,很多操作都做成了批處理方式,在HSQLDB中也可以自己構(gòu)造批處理,在HSQLDB中有個(gè)圖形界面可以用,相對(duì)直觀一些,對(duì)于體積來(lái)說(shuō),HSQLDB好像更小巧點(diǎn),他們都支持內(nèi)存數(shù)據(jù)庫(kù),目前在數(shù)據(jù)庫(kù)性能上沒(méi)有做比較。總的來(lái)說(shuō),JavaDB是個(gè)不錯(cuò)的選擇,使用起來(lái)比較方便。此文僅做簡(jiǎn)單介紹,如果希望了解得更多,可參考官方文檔http://db.apache.org/derby/manuals/index.html#latest
    有幾個(gè)不同部分的文檔,與SQL相關(guān)的部分如創(chuàng)建刪除表的SQL怎么寫(xiě),可以參考其中的《Derby Reference Manual》
    另外在學(xué)習(xí)JavaDB里找了一些資料,下面這一篇我覺(jué)得還不錯(cuò),一并附上
    參考資料:http://www.codejava.net/java-se/jdbc/connect-to-apache-derby-java-db-via-jdbc
    主站蜘蛛池模板: 久久精品私人影院免费看| 男女猛烈无遮掩视频免费软件| 亚洲人成77777在线播放网站不卡| 亚洲色图激情文学| 国产精品亚洲а∨无码播放不卡| 一级成人毛片免费观看| 你懂的免费在线观看网站| 曰曰鲁夜夜免费播放视频| 国产大片51精品免费观看| 国产午夜亚洲精品理论片不卡| 久久久久久久亚洲Av无码| 亚洲日韩精品无码AV海量| 精品久久久久久国产免费了| 99爱视频99爱在线观看免费| 好吊妞在线成人免费| 亚洲综合区小说区激情区| 666精品国产精品亚洲| 欧美亚洲国产SUV| 日本三级在线观看免费| 毛片a级毛片免费播放下载| 亚洲午夜精品一级在线播放放| 久久综合亚洲鲁鲁五月天| 香蕉视频亚洲一级| 无码日韩精品一区二区三区免费 | 57pao国产成视频免费播放| 午夜免费不卡毛片完整版| 国产精品亚洲成在人线| 亚洲一区二区观看播放| 精品久久久久久国产免费了| 毛片免费在线观看网址| 污视频网站免费在线观看| 三年片在线观看免费大全电影| 亚洲av伊人久久综合密臀性色| 亚洲一区二区三区91| 一级毛片在线免费视频| 野花高清在线观看免费3中文| 国产亚洲精品高清在线| 中文字幕亚洲男人的天堂网络| 男女一边桶一边摸一边脱视频免费| 免费精品国偷自产在线在线| 国产亚洲无线码一区二区|