試用開源資料庫ApacheDerby

redhouser發表於2012-06-08

0,版本
在下載,要求JRE版本不低於1.5.

1,設定環境
假設:
DERBY安裝路徑:D:\dev\db-derby-10.8.2.2-bin

使用者環境變數設定如下:
myenv.bat:
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_04
set PATH=%JAVA_HOME%\bin;%PATH%
set DERBY_INSTALL=D:\dev\db-derby-10.8.2.2-bin
set CLASSPATH=%DERBY_INSTALL%\lib\derby.jar;%DERBY_INSTALL%\lib\derbytools.jar;%DERBY_INSTALL%\lib\derbynet.jar;%DERBY_INSTALL%\lib\derbyclient.jar;.

2,驗證Derby
java org.apache.derby.tools.sysinfo
------------------ Java 資訊 ------------------
Java 版本:        1.6.0_04
Java 供應商:      Sun Microsystems Inc.
Java 主目錄:      C:\Program Files\Java\jdk1.6.0_04\jre
Java 類路徑:      D:\dev\db-derby-10.8.2.2-bin\lib\derby.jar;D:\dev\db-derby-10
.8.2.2-bin\lib\derbytools.jar;.
OS 名:            Windows XP
OS 體系結構:      x86
OS 版本:          5.1
Java 使用者名稱:      mahong
Java 使用者主目錄:C:\Documents and Settings\mahong
Java 使用者目錄:    D:\dev\db-derby-10.8.2.2-bin
java.specification.name: Java Platform. API Specification
java.specification.version: 1.6
java.runtime.version: 1.6.0_04-b12
--------- Derby 資訊 --------
JRE - JDBC: Java SE 6 - JDBC 4.0
[D:\dev\db-derby-10.8.2.2-bin\lib\derby.jar] 10.8.2.2 - (1181258)
[D:\dev\db-derby-10.8.2.2-bin\lib\derbytools.jar] 10.8.2.2 - (1181258)
------------------------------------------------------
----------------- 語言環境資訊 -----------------
當前語言環境:  [中文/中國 [zh_CN]]
找到支援的語言環境:[cs]
         版本:10.8.2.2 - (1181258)


3,訪問嵌入式資料庫
視窗1:
啟動資料庫例項。
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

視窗2:
D:\dev\java org.apache.derby.tools.ij
ij 版本 10.8
ij>connect 'jdbc:derby:MyDbTest;create=true';
lj>exit;

在當前路徑下生成MyDbTest目錄,併產生Derby.log日誌檔案.
這種方式下,資料庫例項與應用程式在同一個JVM內.

4,訪問伺服器資料庫
--視窗1:
--啟動網路伺服器
D:\dev\derby-db>java -jar %DERBY_INSTALL%\lib\derbyrun.jar server start
Wed Jun 06 19:34:35 CST 2012 : 已使用基本伺服器安全策略安裝了安全管理程式。
Wed Jun 06 19:34:35 CST 2012 : Apache Derby 網路伺服器 - 10.8.2.2 - (1181258)
已啟動並準備接受埠 1527 上的連線

--視窗2:
--以客戶端方式連線:
D:\dev\java org.apache.derby.tools.ij
ij 版本 10.8
ij> connect 'jdbc:derby://localhost:1527/MyDbTest;create=true';
==>建立了資料庫MyDbTest,在啟動server的目錄下.

ij> create table dept(deptno int not null,name varchar(30));
已插入/更新/刪除 0 行
ij> alter table dept add constraint pk_dept primary key(deptno);
已插入/更新/刪除 0 行

ij> create table emp(empno int,name varchar(40),addr varchar(40),deptno int);
已插入/更新/刪除 0 行
ij> alter table emp add constraint fk_emp_r_dept foreign key(deptno) references
dept(deptno);
已插入/更新/刪除 0 行

ij> insert into emp values(1,'name1','addr1',1);
錯誤 23503:表“EMP”上的 INSERT 導致違反鍵 (1) 的外來鍵約束“FK_EMP_R_DEPT”。語
句已回滾。
==>外來鍵約束

ij> insert into dept values(1,'deptname1');
已插入/更新/刪除 1 行
ij> insert into emp values(1,'name1','addr1',1);
已插入/更新/刪除 1 行
ij> commit;
ij> insert into emp values(2,'name2','addr2',1);
已插入/更新/刪除 1 行
ij> rollback;

ij>exit;

--關閉伺服器:
D:\dev\java -jar %DERBY_INSTALL%\lib\derbyrun.jar server shutdown

--視窗1:
--重新啟動伺服器
D:\dev\derby_db>java -jar %DERBY_INSTALL%\lib\derbyrun.jar server start
Wed Jun 06 20:20:32 CST 2012 : 已使用基本伺服器安全策略安裝了安全管理程式。
Wed Jun 06 20:20:32 CST 2012 : Apache Derby 網路伺服器 - 10.8.2.2 - (1181258)
已啟動並準備接受埠 1527 上的連線

--視窗2:
--啟動客戶端查詢結果
D:\dev>java org.apache.derby.tools.ij
ij 版本 10.8
ij> connect 'jdbc:derby://localhost:1527/MyDbTest';
ij> select * from emp;
EMPNO      |NAME                                    |ADDR
             |DEPTNO
--------------------------------------------------------------------------------
-------------------------
1          |name1                                   |addr1
             |1
2          |name2                                   |addr2
             |1

已選擇 2 行

==>透過測試表明:伺服器啟動時,並沒有檢查並開啟資料庫;只有在客戶端訪問時,在啟動伺服器的目錄下建立或查詢指定資料庫;
啟動一個伺服器,可以同時支援客戶端對多個資料庫的訪問.


5,測試java程式
視窗1:
啟動資料庫例項。
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

視窗2:
D:\dev\db-derby-10.8.2.2-bin\demo\programs\simple>javac SimpleApp.java
注意:SimpleApp.java 使用了未經檢查或不安全的操作。
注意:要了解詳細資訊,請使用 -Xlint:unchecked 重新編譯。

D:\dev\db-derby-10.8.2.2-bin\demo\programs\simple>java SimpleApp derbyclient
SimpleApp starting in derbyclient mode
Loaded the appropriate driver
Connected to and created database derbyDB
Created table location
Inserted 1956 Webster
Inserted 1910 Union
Updated 1956 Webster to 180 Grand
Updated 180 Grand to 300 Lakeshore
Verified the rows
Dropped table location
Committed the transaction
SimpleApp finished

關於如何與其他產品配合,分別參考:
Eclipse:

iBatis:

Tomcat:

6,匯入/匯出
在當前目錄準備myfile.txt:
3,name3,addr3,1
4,name4,addr4,1
5,name5,addr5,1
6,name6,addr6,1

視窗1:
啟動資料庫例項。
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

視窗2:
D:\dev\derby_db>java org.apache.derby.tools.ij
ij> connect 'jdbc:derby://localhost:1527/MyDbTest';

ij> CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE(
    null,'EMP','myfile.txt',',',null,null,0);


ij> select * from emp;
EMPNO      |NAME                                    |ADDR
             |DEPTNO
--------------------------------------------------------------------------------
-------------------------
1          |name1                                   |addr1
             |1
2          |name2                                   |addr2
             |1

已選擇 2 行

ij> CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE(
    null,'EMP','myfile.txt',',',null,null,0);
> 錯誤 XIE0R:檔案 myfile.txt 中的第 4 行發生匯入錯誤:在行 4 上的意外位置中讀取
到 endOfFile。
錯誤 XIE0E:在行 4 上的意外位置中讀取到 endOfFile。
==>最後以行需要換行

ij> CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE(
>     null,'EMP','myfile.txt',',',null,null,0);
已執行語句。
ij> select * from emp;
EMPNO      |NAME                                    |ADDR
             |DEPTNO
--------------------------------------------------------------------------------
-------------------------
1          |name1                                   |addr1
             |1
2          |name2                                   |addr2
             |1
3          |name3                                   |addr3
             |1
4          |name4                                   |addr4
             |1
5          |name5                                   |addr5
             |1
6          |name6                                   |addr6
             |1

已選擇 6 行
ij>CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE(
    null,'EMP','myfile.out',null,null,null);

==>在當前路徑下生成檔案myfile.out
1,"name1","addr1",1
2,"name2","addr2",1
3,"name3","addr3",1
4,"name4","addr4",1
5,"name5","addr5",1
6,"name6","addr6",1

--根據文件說明,還支援LOB欄位的匯入/匯出。


7 備份恢復
7.1備份
視窗1:
啟動資料庫例項。
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

視窗2:
D:\dev\derby_db>java org.apache.derby.tools.ij
ij> connect 'jdbc:derby://localhost:1527/MyDbTest';

ij> CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE('d:/dev/backup/2012-06-07');
==>會自動建立目錄2012-06-07,將資料備份到該目錄下。

ij> exit;
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl shutdown
Thu Jun 07 08:13:25 CST 2012 : Apache Derby 網路伺服器 - 10.8.2.2 - (1181258)
關閉

D:\dev\derby_db>rmdir /S Mydbtest
Mydbtest, 是否確認(Y/N)? y

D:\dev\derby_db>dir
 驅動器 D 中的卷是 work
 卷的序列號是 2044-0107

 D:\dev\derby_db 的目錄

2012-06-07  08:14   

          .
2012-06-07  08:14              ..
2012-06-07  08:13             1,047 derby.log
2012-06-07  08:05               126 myfile.out
2012-06-07  08:02                68 myfile.txt
               3 個檔案          1,241 位元組
               2 個目錄  8,345,808,896 可用位元組

7.2恢復
視窗1:
D:\dev\derby_db>java org.apache.derby.drda.NetworkServerControl start

視窗2:
D:\dev\derby_db>java org.apache.derby.tools.ij
ij 版本 10.8
ij> connect 'jdbc:derby://localhost:1527/MyDbTest';
錯誤 08004:由於找不到資料庫 MyDbTest,已拒絕連線。

ij> connect 'jdbc:derby://localhost:1527/MyDbTest;restoreFrom=d:/dev/backup/2012
-06-07';
錯誤 XJ040:DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ040, SQLERRMC: 無法使用類
載入器 啟動資料庫 'MyDbTest',請參閱下一
個異常,以瞭解詳細資訊。::SQLSTATE: XBM0Q未找到檔案 d:\dev\backup\2012-06-07\ser
vice.properties。請確保備份副本正確而且未損壞。

ij> connect 'jdbc:derby://localhost:1527/MyDbTest;restoreFrom=d:/dev/backup/2012
-06-07/MyDbTest';
ij> select count(*) from emp;
1
-----------
6

已選擇 1 行

 

8 複製
Derby支援的複製有如下特點:
*基於事務日誌
*只有主庫處理事務,備庫不支援事務,也不支援只讀開啟
*非同步,主庫提交事務與日誌傳送/應用無關(可能導致切換時丟失部分資料)
*一個例項可以同時充當多個角色(資料庫D1的主庫角色,資料庫D2的從庫角色,非複製資料庫D3)


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-732277/,如需轉載,請註明出處,否則將追究法律責任。

相關文章