1、Derby數據庫簡介java
一、Derby的發展史及特性概述
mysql
Derby是一個開源的,100%由Java開發的關係數據庫,隨着Java平臺的普及Derby也收到了sql
愈來愈多的關注。Derby的前身是美國IBM公司的ColudScape。2004年4月,IBM公司將數據庫
CloudScape的數據庫捐獻給了Apache軟件基金會,並將其改名爲Derby,apache
接着SUN也爲Derby捐獻了一個團隊。不一樣的是,在JavaSE6.0中,SUN將其命名爲JavaDB。服務器
所以,CloudScape、Derby和JavaDB只是該項目在不一樣時期的不一樣名稱而已。網絡
一提起關係數據庫,總會讓人以爲安裝煩瑣,空間佔用很大。然而Derby卻不是這樣,併發
不用安裝,能夠直接使用。同時,附帶的Derby也只佔用了JavaSE6.0中不到10MB的空間。oracle
千萬不要認爲Derby的功能會很弱,其所有支持SQL92標準以及許多SQL99的擴展,而且編輯器
提供了事務、崩潰恢復、併發鏈接等大型數據庫的特性,管理幾十GB的數據時依然輕鬆自如,
速度很快。
同時,因爲Derby是由純java開發的,所以也與生俱來具備了java的跨平臺性,能夠很好地
工做在各類操做系統上。另外,derby不但能夠像傳統數據庫那樣以C/S的方式工做,
也支持嵌入式的工做方式。
二、JavaSE 6.0 中derby的目錄結構
默認是安裝路徑
"lib"目錄中的幾個jar文件
derby.jar--------包含了一些使用derby數據庫時的所必須類,例如derby數據庫的JDBC驅動類。
derbytools.jar-提供了一些實用derby數據庫的工具,例如用來管理derby數據庫的命令行工具。
derbyclient.jar-提供了一些開發derby數據客戶端所必須的類,經過使用該jar包中的類,
能夠開發出對網絡模式下derby數據庫服務器訪問的客戶端程序。
derbynet.jar----爲網絡模式下的derby數據庫服務器提供支持的類。
2、管理工具ij
通常狀況下每種數據庫系統都會提供管理工具,如mysql的命令行客戶端,oracle的sql*plus等。
derby也不例外,專門提供了一個功能很是強大的命令行工具----ij。
一、準備工做
使用該工具以前,首先須要作一些準備工做,主要是將ij工具須要的jar包路勁添加進classpath環境變量,
以及設置一個名稱爲DERBY_INSTALL的環境變量,步驟以下:
①修改/增長classpath環境變量(我這裏是用戶環境變量)
變量名:classpath
變量值:C:\Program Files\Sun\JavaDB\lib\derbytools.jar;C:\Program Files\Sun\JavaDB\lib\derby.jar
若是是修改classpath環境變量,不要忘記加分號。
提示:根據本身機器中java db的安裝狀況進行設置。
②增長DERBY_INSTALL環境變量
變量名:DERBY_INSTALL
變量值:C:\Program Files\Sun\JavaDB
提示:根據本身機器中java db的安裝狀況進行設置。
完成了上述步驟後,就完成了使用ij命令行工具的準備工做。爲了驗證準備工做成功,
ij可以正常工做,在命令行提示符窗口(cmd)中輸入以下命令
java org.apache.derby.tools.sysinfo
若是準備工做的設置沒有問題,cmd中會顯示java系統的不少信息,以下圖所示
二、簡單使用
ij是derby自帶的一個功能強大的數據庫管理工具,能夠進行不少數據庫管理的操做,包括建立數據庫,
啓動/關閉數據庫,執行SQL腳本等。完成準備工做後,就能夠啓動並使用ij工具了。
在cmd中輸入以下命令啓動ij工具,java org.apache.derby.tools.ij運行狀況以下圖所示:
下面分別介紹幾個經常使用的ij命令,以下所列:
①建立以及鏈接數據庫
使用ij建立以及鏈接指定數據庫命令命令的語法格式以下:
connect 'jdbc:derby:<數據庫路徑>[;create=True/False]';
數據庫路勁指的是指定數據庫在磁盤上存放的位置,例如「E:\roway」。另外,路徑也可使用相對路徑,
例如"roway",此路徑表示當前執行目錄下的roway子目錄,若當前執行目錄爲「E:\」則實景路徑爲「E:\roway」。
方括號的內容是可選的,也就是說能夠不寫,若不寫至關於"create=False"。
"create=False"表示僅鏈接已經存在的數據庫,而"create=True"表示若數據庫不存在則建立數據庫。
提示:上面介紹的鏈接和建立數據庫的命令,是用於derby的嵌入式工做模式的,
用於網絡狀況下的命令將在後面介紹。
例如,下面給出了一個在E盤下roway目錄中建立數據庫的命令
connect 'jdbc:derby:e:/roway;create=True';
完成了數據庫的建立和鏈接後,就可使用其餘命令或運行SQL腳本對數據庫進行操做了。
說明:第一次不存在數據庫的時候使用"create=True"參數來建立並鏈接數據庫,
之後就可使用"create=False"參數僅鏈接數據庫了。
②運行SQL語句
③運行SQL腳本
上面介紹了在ij中直接輸入執行SQL語句,在操做簡單的狀況下很好用,若是操做複雜直接進行輸入
就很不方便了。所以,ij中還容許用戶使用run命令執行指定的SQL腳本,基本命令格式以下:
run '<SQL腳本文件的路徑>';
在文本編輯器中輸入以下SQL腳本,並保存爲derby.sql腳本文件,例如「E:/derby.sql」.
[sql] view plaincopy
create table students(
id numeric(20),
name varchar(30),
age numeric(6)
);
insert into students values(10001,'Aa',10);
insert into students values(10002,'Bb',20);
insert into students values(10003,'Cc',30);
select * from students;
鏈接前面建立的數據庫,並使用run命令執行"derby.sql"腳本文件,執行狀況以下圖所示:
④其餘經常使用命令
除了前面介紹的幾種比較重要的命令外,還有一些其餘經常使用的命令,例如關閉數據庫鏈接等,
disconnect;-----------------------斷開數據庫鏈接
Exit;---------------------------------退出ij 工具
3、Derby數據庫的嵌入式應用
一、嵌入式derby的工做原理
在嵌入式工做模式中訪問derby數據庫的java應用程序與derby的數據庫引擎工做在同一個JVM中,
不像別的數據庫(如oracle)的數據庫鏈接時鏈接到JVM以外的數據庫引擎中。這樣作的優勢是,
省去了數據庫軟件的安裝、數據源的配置等步驟,隨着java應用程序的啓動數據庫也啓動工做,
特別適合進行單機小軟件或測試程序的開發。
但須要注意的是,嵌入式工做模式中應用程序訪問數據庫的鏈接是專有的,這就意味着其餘
應用程序不可能在同一時刻訪問該數據庫。
二、嵌入式derby應用的開發步驟
進行嵌入式derby應用的開發,與一般的JDBC數據庫開發並無很大的區別,基本步驟仍是
加載數據庫驅動、建立數據庫鏈接、經過鏈接操做數據庫,只是在細節稍有不一樣。
①加載數據庫驅動
須要鏈接的是derby數據庫,須要加載derby數據庫的jdbc驅動類,位於"lib"目錄下的derby.jar文件中。
在運行程序時須要將derby.jar文件的路徑添加到classpath路徑中。
[java] view plaincopy
//加載嵌入式derby的JDBC驅動類
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
說明:網絡模式derby的jdbc驅動類不是這個,在後面會介紹。
②數據庫鏈接字符串
成功地加載了數據庫驅動類以後能夠經過鏈接字符串來獲取數據庫鏈接了,
下面給出了鏈接字符串的基本格式:
jdbc:derby:<數據庫路徑>[;create=True/False]
另外,要注意的是因爲介紹的derby工做在嵌入式模式,所以在應用程序退出以前應該關閉數據庫。
關閉嵌入式的derby數據庫也是使用鏈接字符串,下面給出了語法格式。
jdbc:derby:;shutdown=True
[java] view plaincopy
//鏈接指定的derby數據庫
Connection conn = DriverManager.getConnection("jdbc:derby:e:/roway;create=False","","");
//關閉已經鏈接的數據庫
DriverManager.getConnection("jdbc:derby:;shutdown=True");
提示:在關閉數據庫成功後,getConnection()方法將拋出異常來進行通知。
③操做數據庫
對derby數據庫進行操做所採用的代碼和訪問其餘數據庫的徹底相同,
也是使用經過數據庫鏈接獲取的Statement或PreparedStatement來執行指定的SQL語句。
說明:從上述3個步驟的介紹中額能夠看出,以嵌入式方式訪問derby數據庫與訪問其餘數據庫基本相同,
想把使用其餘數據庫的應用移植到derby上市很是容易的。
三、使用嵌入式derby的簡單案例
提示:使用嵌入式derby數據庫進行開發和使用其餘數據庫從編寫代碼的角度沒有太大的不一樣,
但省去了安裝與配置數據庫的麻煩,這在特定的狀況下將很是有用。
4、Derby數據庫的網絡模式應用
derby數據庫不但能夠經過嵌入式模式工做,與其餘的數據庫相同,也能夠工做在網絡模式下
同時爲多個應用程序服務,處理來自不一樣JVM的數據庫操做請求。
一、網絡模式derby的工做原理
若是使用過其餘的一些大型數據庫,例如oracle、db2等,那麼應該對數據庫的網絡
工做模式(c/s模式)的原理至關熟悉。
在這種模式下derby與其餘數據庫同樣做爲一個獨立的服務器工做在網絡上,等待來自其餘
java應用程序的鏈接請求。這種模式中derby能夠同時爲不一樣的java應用程序服務,處理來自不一樣JVM
的數據庫操做請求,也就是說同一時刻能夠有多個應用程序訪問同一個derby數據庫。
說明:當不適合採用嵌入式進行操做時,例如應用程序與數據庫不在同一臺機器上,
或者數據庫須要多用戶併發訪問時,就能夠採用網絡模式的的derby。
二、操做網絡模式的derby
接下來介紹如何對網絡模式下的derby進行操做,主要包括以網絡模式啓動derby
以及使用ij工具鏈接網絡模式的derby。
①以網絡模式啓動derby
使用網絡模式操做derby數據庫前,首先要以網絡模式啓動derby數據庫服務器,
下面給出了啓動命令的基本格式:
java org.apache.derby.drda.NetworkServerControl start [-h <host> [-p <port>]]
NetworkServerControl是系統提供的一個用於啓動derby服務器的類,位於derbynet.jar文件中。
所以須要將derbynet.jar文件路徑添加到系統的classpath環境變量中。
方括號中爲可選參數,"-h <host>"用來指定主機,"-p <port>"用來指定端口號,
默認的主機爲localhost,默認的端口號爲1527。
例如,下面給出了一個啓動derby數據庫服務器工做在本機1527端口的命令。
java org.apache.derby.drda.NetworkServerControl start -h localhost -p 1572
當成功啓動derby數據庫的網絡服務後,能夠從網路中的其餘機器或本機來對該機器中的derby數據庫
進行操做了。須要特別注意的是,在執行網路操做的過程當中,cmd窗口不能關閉,一旦關閉則將斷開網路服務。
②使用ij工具鏈接網絡模式的derby
當derby數據庫的網路服務啓動後,可使用ij工具進行鏈接和操做,
下面給出了ij中鏈接網絡模式derby的名稱格式。
connect 'jdbc:derby://<服務器主機地址>:<服務器端口號>/<數據庫路徑>[;create=True|False]';
提示:使用上述命令鏈接derby數據庫服務器以前首先須要將derbyclient.jar文件路徑添加到系統的
classpath環境變量中,
例如,下面的命令鏈接上了上面啓動的derby數據庫服務。
connect 'jdbc:derby://localhost:1572/E:/roway';
若是上述命令在ij中成功執行,則與指定數據庫的鏈接成功創建,接着就可使用各類命令對所鏈接的
數據庫進行操做了。對網絡derby數據庫進行操做的命令與嵌入式derby徹底相同。
三、開發啓動derby網絡服務的程序
實際應用中,不但能夠經過前面介紹的命令來啓動的derby數據庫的網路服務,也能夠經過本身開發的
java程序來啓動derby數據庫的網絡服務。
從前面的介紹中能夠發現,經過命令啓動derby數據庫的網絡服務須要使用
org.apache.derby.drda.NetworkServerControl類。一樣,本身開發程序啓動derby數據庫的網絡服務也須要
使用這個類,有興趣的能夠自行查閱API。
四、使用網絡模式derby的簡單案例
客戶端鏈接網絡derby服務器須要的JDBC驅動類org.apache.derby.jdbc.ClientDriver