Apache Derby

使用

sysinfo或java org.apache.derby.tools.sysinfo  查看安裝信息版本
啟動derby的網絡伺服器，默認監聽127.0.0.1的1527埠，可以修改監聽的IP和PORT
   java org.apache.derby.drda.NetworkServerControl start -p 1388  #指定端口
或者
   startNetworkServer -h myhost -p 1388   #指定ip和端口
或者
java -jar derby/lib/derbyrun.jar server start
dblook工具是一個Data Definition Language (DDL)生成工具，可以卸載（dump）所有或部分用戶指定的DDL到一個文件或控制台。
啟動JDBC客戶端工具ij，可以執行SQL腳本或者交互式查詢：
 ij或java org.apache.derby.tools.ij 或 java -jar derby/lib/derbyrun.jar ij -p ij.properties
ij命令行參數：
 ij -Dij.connection.mynetconnection=jdbc:derby://myserver:1527/mydb -Dij.user=me -Dij.password=nocansay
也可以創建一個名為ij.properties，用於默認連接資料庫：
 ij.driver=org.apache.derby.jdbc.ClientDriver
 ij.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,也可以通过运行                        <Derby_Home>/frameworks/NetworkServer/bin/startNetworkServer.bat                来启动Derby网络服务器；如果是Unix,用startNetworkServer            */

            NetworkServerControl 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資料庫（即Java DB）的任何connection的當前schema，默認是對應於該用戶名的一個schema。如果無用戶名被提供，那麼當前用戶名與當前schema預設是APP。
但即使當前schema被設置為用戶名，這個schema仍然可能不存在。一個schema只能被創建：通過CREATE SCHEMA語句顯式創建或者創建一個對象（例如表等）來隱式創建。
APP schema總是存在，不需要創建。
如果你的程式試圖訪問當前schema但該schema下沒有創建任何對象，就會遇到「schema not exists」錯誤。