posts - 2, comments - 27, trackbacks - 0, articles - 60
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          JavaDB數據庫使用筆記

          Posted on 2017-01-10 10:48 ZhouFeng 閱讀(3295) 評論(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
          主站蜘蛛池模板: 苍山县| 台南市| 城步| 咸阳市| 建宁县| 车致| 博野县| 三明市| 泰州市| 翼城县| 安福县| 平陆县| 苗栗市| 云浮市| 涞源县| 小金县| 盐亭县| 政和县| 广宗县| 桓台县| 德钦县| 讷河市| 六盘水市| 孟州市| 华亭县| 招远市| 册亨县| 阿拉善盟| 哈巴河县| 巨野县| 乡城县| 武川县| 屯留县| 南平市| 兴山县| 海阳市| 阿鲁科尔沁旗| 博湖县| 牟定县| 莲花县| 吉林省|