Apache Derby

Apache Derby是Apache軟體基金會所研發的開放原始碼資料庫管理系統；由於Derby是一個純Java程式，因此只需要作業系統支援Java虛擬機器，Derby便可執行。特性.Derby是特別地為Java環境進行最佳化，Derby本身不僅是一個純Java程式，而且Derby在執行使用者的SQL程式時，能夠把SQL編譯成Java bytecode並以系統的Java虛擬機器執行。由於SQL程式轉成的Java bytecode能被JIT動態翻譯，因此Derby可能比傳統的資料庫管理系統更佳的效能。其他特性包括：安裝.下載解壓後，只需要配置好相關的環境變數：使用.sysinfo或java org.apache.derby.tools.sysinfo 檢視安裝資訊版本啟動derby的網路伺服器，預設監聽127.0.0.1的1527埠，可以修改監聽的IP和PORTjava org.apache.derby.drda.NetworkServerControl start -p 1388 #指定埠或者startNetworkServer -h myhost -p 1388 #指定ip和埠或者java -jar derby/lib/derbyrun.jar server startdblook工具是一個Data Definition Language (DDL)生成工具，可以解除安裝所有或部分使用者指定的DDL到一個檔案或控制檯。啟動JDBC客戶端工具ij，可以執行SQL指令碼或者互動式查詢：ij或java org.apache.derby.tools.ij 或 java -jar derby/lib/derbyrun.jar ij -p ij.propertiesij命令列引數：ij -Dij.connection.mynetconnection=jdbc:derby://myserver:1527/mydb -Dij.user=me -Dij.password=nocansay也可以建立一個名為ij.properties，用於預設連線資料庫：ij.driver=org.apache.derby.jdbc.ClientDriverij.protocol=jdbc:derby://localhost:1527/ij.database=COREJAVA;create=true或者先設定環境變數：set DERBY_OPTS=-Dij.protocol=jdbc:derby://localhost/ 在ij客戶端工具內部，不區分大小寫，每條命令都應以分號結尾。連線資料庫並在必要時建立資料庫：connect 'jdbc:derby:mydb;create=true;user=test;password=test'; //建立/連線嵌入式資料庫,//如果只寫資料庫名則會在當前目錄下建立資料庫目錄//也可以指定其他位置進行建立"jdbc:derby:d:/a/b/userDB;create=true;user=test;password=test"connect 'jdbc:derby://host:1527/dbname;create=true'; //建立/連結網路資料庫檢視ij的命令：help;執行sql檔案：run 'D:/derby/demo/ToursDB_schema.sql' [RunResultOutput.txt]；斷開資料庫連線disconnect;退出客戶端：exit ;關閉資料庫伺服器：java -jar derby/lib/derbyrun.jar server shutdown命令行當前目錄中derby.log日誌檔案，derby在其中記錄的資料庫啟動、關閉的資訊。Java程式訪問Derby資料庫：package test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class EmbeddedDerbyTester {public static void main(String[] args) {String driver = "org.apache.derby.jdbc.EmbeddedDriver";//在derby.jar裡面String dbName="EmbeddedDB";String dbURL = "jdbc:derby:"+dbName+";create=true";//create=true表示當資料庫不存在時就建立它try {Class.forName(driver);Connection conn = DriverManager.getConnection(dbURL);//啟動/連線嵌入式資料庫Statement st = conn.createStatement();st.execute("create table foo (FOOID INT NOT NULL,FOONAME VARCHAR(30) NOT NULL)");//建立foo表st.executeUpdate("insert into foo(FOOID,FOONAME) values (1,'chinajash')");//插入一條資料ResultSet rs = st.executeQuery("select * from foo");//讀取剛插入的資料while(rs.next()){int id = rs.getInt(1);String name = rs.getString(2);System.out.println("id="+id+";name="+name);} catch(Exception e){e.printStackTrace();啟動Derby網路伺服器的Java程式：package test;import java.io.PrintWriter;import java.sql.DriverManager;import org.apache.derby.drda.NetworkServerControl;public class NetworkServerDerbyTester {public static void main(String[] args) {String driver = "org.apache.derby.jdbc.ClientDriver";//在derbyclient.jar裡面String dbName="NetworkDB";String connectionURL = "jdbc:derby://localhost:1527/" + dbName + ";create=true";try {啟動Derby網路伺服器,預設埠是1527,也可以透過執行/frameworks/NetworkServer/bin/startNetworkServer.bat來啟動Derby網路伺服器；如果是Unix,用startNetworkServerNetworkServerControl derbyServer = new NetworkServerControl();//NetworkServerControl類在derbynet.jar裡面PrintWriter pw = new PrintWriter(System.out);//用系統輸出作為Derby資料庫的輸出derbyServer.start(pw);//啟動Derby伺服器Class.forName(driver);DriverManager.getConnection(connectionURL);//do something here...derbyServer.shutdown();//關閉Derby伺服器} catch (Exception ex) {ex.printStackTrace();Schema實現.Apache Derby資料庫的任何connection的當前schema，預設是對應於該使用者名稱的一個schema。如果無使用者名稱被提供，那麼當前使用者名稱與當前schema預設是APP。但即使當前schema被設定為使用者名稱，這個schema仍然可能不存在。一個schema只能被建立：透過CREATE SCHEMA語句顯式建立或者建立一個物件來隱式建立。APP schema總是存在，不需要建立。如果你的程式試圖訪問當前schema但該schema下沒有建立任何物件，就會遇到“schema not exists”錯誤。