<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    JavaDB數據庫使用筆記

    Posted on 2017-01-10 10:48 ZhouFeng 閱讀(3279) 評論(0)  編輯  收藏 所屬分類: 原創JAVADataBase
    在做一些小的應用系統時,用過嵌入式數據庫,使用過HSQLDB,這個比較小巧,在做了幾個應用之后覺得挺好用的,因為數據量不多,也能夠滿足要求,也就在嵌入式數據庫這條路上越走越遠了。
    在JAVA里也有一個嵌入式數據庫,也想嘗試著用一下,便有了下面這篇日志。在安裝jdk的時候會提示安裝一個數據庫,如果勾選的話,則會在安裝Java嵌入式數據庫JavaDB,在JAVA_HOME目錄下多出一個db的目錄(在jdk6版本里目錄名為JavaDB),里面就是與數據庫有關的文件了,如果安裝jdk時沒有選擇安裝,可以在官網http://db.apache.org/derby/derby_downloads.html上下載解壓即可,經過了一段時間的摸索,現小結如下。

    1.配置環境變量

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

    2.目錄介紹

    在DERBY_HOME目錄下有兩個目錄bin和lib
    bin:存放執行批處理文件,用于查看,啟動和停止數據庫的腳本
    lib:存放所用到的jar包
    bin目錄下有幾個主要的文件,有兩個不同的方式,沒有.bat后綴的文件為Linux平臺下運行的腳本,bat文件為Windows平臺使用的批處理
    dblook:用于查看數據庫的基本信息及DDL語句
    ij:命令行客戶端程序,提供與數據庫的交互
    NetworkServerControl:提供網絡服務,主要被startNetworkServer和stopNetworkServer調用
    startNetworkServer:啟動網絡數據庫模式,開啟監聽
    stopNetworkServer:關閉網絡數據庫模式,停止監聽
    sysinfo:查看當前系統信息,可用于檢測數據庫是否正確安裝
    幾個以CP結束的批處理,主要用于在不同模式下設置CLASSPATH用的,如果把lib目錄下的jar文件添加到CLASSPATH中,就可以不用通過執行批處理來設置CLASSPATH了

    3.用命令行方式開啟數據庫

    G:\Java\jdk1.8.0_73\db\bin>ij
    ij 版本 10.11
    ij> connect 'jdbc:derby:mydb;create=true';
    加上create=true表明如果庫mydb不存在,則創建,數據庫文件存放位置為當前目錄,接下來創建一個表,可以把三個字段定義信息寫在一行里面,結束時要加分號
    ij> create table stu(id int not null generated by default as identity,
    > stuname varchar(20),
    > email varchar(30));
    已插入/更新/刪除 0 行
    向表中寫入一條記錄,并進行查詢
    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 行
    退出命令行狀態
    ij> exit;
    重新進入命令行方式,進行數據驗證
    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 行
    查看當前表結構可以用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中創建一個Java工程,導入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"; // 在工程目錄下創建數據庫
        
    // private static String protocol = "jdbc:derby:db/db3;create=true";    //在工程目錄下db目錄中創建數據庫
        
    // private static String protocol = "jdbc:derby:D:/mydbs/db3;create=true";    //在D:/mydbs/目錄下創建數據庫

        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();
            }
        }
    }
    運行結果
    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.網絡數據庫模式

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

    -- ----------------------------------------------
    -- 表的 DDL 語句
    -- ----------------------------------------------

    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));
    以命令行方式進行數據庫連接并測試
    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>
    此時也可以在Eclipse中使用Java程序進行數據庫訪問,需要加載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();
            }
        }
    }
    控制以輸出結果為
    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
    此時查看數據庫內容為
    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>

    小結

    終于學習了JavaDB,又嘗試了一種嵌入式數據庫,在做一些小項目或是應用演示時很方便。在了解過JavaDB后,覺得JavaDB也是個不錯的選擇,很多操作都做成了批處理方式,在HSQLDB中也可以自己構造批處理,在HSQLDB中有個圖形界面可以用,相對直觀一些,對于體積來說,HSQLDB好像更小巧點,他們都支持內存數據庫,目前在數據庫性能上沒有做比較。總的來說,JavaDB是個不錯的選擇,使用起來比較方便。此文僅做簡單介紹,如果希望了解得更多,可參考官方文檔http://db.apache.org/derby/manuals/index.html#latest
    有幾個不同部分的文檔,與SQL相關的部分如創建刪除表的SQL怎么寫,可以參考其中的《Derby Reference Manual》
    另外在學習JavaDB里找了一些資料,下面這一篇我覺得還不錯,一并附上
    參考資料:http://www.codejava.net/java-se/jdbc/connect-to-apache-derby-java-db-via-jdbc
    主站蜘蛛池模板: 三年片在线观看免费观看大全动漫| 国产在线国偷精品产拍免费| 久久青草免费91观看| 最新欧洲大片免费在线| 亚洲日本在线看片| 猫咪免费人成网站在线观看入口| 一本无码人妻在中文字幕免费| 亚洲白嫩在线观看| 免费视频爱爱太爽了| 亚洲一级大黄大色毛片| 久久久久久精品免费免费自慰| 亚洲最大中文字幕| 久久国产精品免费视频| 亚洲男人天堂av| 青青在线久青草免费观看| 亚洲国产精品成人精品无码区| 粉色视频成年免费人15次| 亚洲高清中文字幕免费| 亚洲一级免费视频| 日本特黄特色aa大片免费| 国产亚洲女在线线精品| 亚洲性猛交XXXX| 久久精品一本到99热免费| 国产亚洲高清不卡在线观看| 日韩免费在线中文字幕| 亚洲无码在线播放| 永久免费在线观看视频| 亚洲午夜无码久久| 亚洲一级特黄大片在线观看| 羞羞漫画页面免费入口欢迎你| 国产亚洲色视频在线| 毛片免费全部播放无码| 亚洲欧美国产精品专区久久| ZZIJZZIJ亚洲日本少妇JIZJIZ | 久久夜色精品国产嚕嚕亚洲av| 国产精品亚洲综合久久| A级毛片内射免费视频| 色婷婷亚洲一区二区三区| 日韩亚洲一区二区三区| 四虎永久在线精品免费网址| 一个人晚上在线观看的免费视频 |