Apache Derby

Apache Derby
原作者Cloudscape Inc (Later IBM)
開發者Apache软件基金会
当前版本
  • 10.16.1.1 (2022年6月15日;穩定版本)[1]
編輯維基數據鏈接
源代码库
  • svn.apache.org/repos/asf/db/derby/code/trunk/
編輯維基數據鏈接
编程语言Java
操作系统跨平臺
类型關聯式資料庫管理系統
许可协议Apache許可證 2.0
网站db.apache.org/derby/

Apache DerbyApache軟件基金會所研發的開放源碼資料庫管理系統;由於Derby是一個純Java程式,因此只需要操作系统支援Java虛擬機,Derby便可執行。

特性

Derby是特別地為Java環境進行優化,Derby本身不僅是一個純Java程式,而且Derby在執行用戶的SQL程式時,能夠把SQL編譯成Java bytecode並以系統的Java虛擬機執行。由於SQL程式轉成的Java bytecode能被JIT動態翻譯,因此Derby可能比傳統的資料庫管理系統更佳的性能。

其他特性包括:

商業的版本

  • Cloudscape - IBM的Derby版本。
  • Java DB - 昇陽電腦自Java 6把Derby包括於JDK

安装

下载解压后,只需要配置好相关的环境变量:

  1. 建立DERBY_HOME,值例:D:\db-derby-10.10.2.0-bin
  2. 在Path加入:%DERBY_HOME%\bin
  3. 在CLASSPATH加入:%DERBY_HOME%\lib\derby.jar;%DERBY_HOME%\lib\derbyclient.jar;%DERBY_HOME%\lib\derbytools.jar;%DERBY_HOME%\lib\derbynet.jar
  • derby.jar 是引擎库。对嵌入式是必须的;对客户/服务器模式,服务器端必须此库
  • derbytools.jar 是Derby工具库,如ij, dblook, import/export
  • derbyoptionaltools.jar
  • derbynet.jar 通过网络服务器连接Derby(非嵌入方式)
  • derbyclient.jar: 网络客户端启动程序
  • derbyrun.jar: 执行jar文件用于简便地启动Derby工具或服务器。需要与其他jar文件在同一目录下
    • java -jar %DERBY_HOME%\lib\derbyrun.jar ij [-p propertiesfile] [sql_script]
    • java -jar %DERBY_HOME%\lib\derbyrun.jar sysinfo [-cp ...] [-cp help]
    • java -jar %DERBY_HOME%\lib\derbyrun.jar dblook [arg]* (or no arguments for usage)
    • java -jar %DERBY_HOME%\lib\derbyrun.jar server [arg]* (or no arguments for usage)

使用

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”错误。[3]

註釋

  1. ^ https://lists.apache.org/thread/c9qvfzvfh5lc9n41rb0638rwx2vdjz80; 检索日期: 2022年10月10日.
  2. ^ Compressing Apache Derby w/ Pack200. 昇陽. [2008-06-08]. (原始内容存档于2007-10-21). 
  3. ^ Apache Derby数据库(即Java DB) Frequently Asked Questions 5.3. Why do I get the error 'schema does not exist'?. [2018-08-03]. (原始内容存档于2020-08-25). 

參見

外部連結

  • (英文) Derby官方網站(页面存档备份,存于互联网档案馆
  • (英文) Cloudscape官方網站
  • (英文) Java DB官方網站 (页面存档备份,存于互联网档案馆
  • (简体中文) Apache Derby 项目资源 (IBM) (页面存档备份,存于互联网档案馆
顶级项目
  • Abdera英语Apache Abdera
  • Accumulo英语Apache Accumulo
  • ActiveMQ
  • Ambari英语Apache Ambari
  • Ant
  • Aries英语Apache Aries
  • Apache Arrow
  • Apache HTTP Server
  • APR
  • Avro
  • Axis
  • Axis2
  • Beam
  • Bloodhound英语Apache Bloodhound
  • Apache Brooklyn英语Apache Brooklyn
  • Buildr英语Apache Buildr
  • Calcite英语Apache Calcite
  • Camel
  • Cassandra
  • Cayenne英语Apache Cayenne
  • Chemistry英语Apache Chemistry
  • CloudStack英语Apache CloudStack
  • Cocoon英语Apache Cocoon
  • Continuum英语Apache Continuum
  • Cordova
  • CouchDB
  • cTAKES英语cTAKES
  • CXF
  • Deltacloud英语Deltacloud
  • Derby
  • Directory英语Apache Directory Server
  • Drill英语Apache Drill
  • Empire-db英语Apache Empire-db
  • ECharts
  • Felix英语Apache Felix
  • Flex
  • Flink
  • Flume英语Apache Flume
  • Forrest英语Apache Forrest
  • Geronimo英语Apache Geronimo
  • Gora英语Apache Gora
  • Gump英语Apache Gump
  • Hadoop
  • Hama英语Apache Hama
  • HBase
  • Hive
  • Jackrabbit英语Apache Jackrabbit
  • James英语Apache James
  • JMeter英语Apache JMeter
  • Kafka
  • Karaf英语Apache Karaf
  • Kylin英语Apache Kylin
  • Lucene
  • Lenya英语Apache Lenya
  • Mahout英语Apache Mahout
  • Marmotta英语Apache Marmotta
  • Maven
  • MINA英语Apache MINA
  • mod_perl英语mod_perl
  • MyFaces英语Apache MyFaces
  • Nutch英语Apache Nutch
  • ODE英语Apache ODE
  • OFBiz英语Apache OFBiz
  • Oozie英语Oozie
  • OpenEJB英语Apache OpenEJB
  • OpenJPA英语Apache OpenJPA
  • OpenNLP
  • OpenOffice
  • PDFBox英语Apache PDFBox
  • Phoenix英语Apache Phoenix
  • POI
  • Pig英语Pig (programming tool)
  • Pivot英语Apache Pivot
  • Qpid英语Apache Qpid
  • River英语Apache River
  • Roller英语Apache Roller
  • RocketMQ
  • Samza英语Apache Samza
  • ServiceMix英语Apache ServiceMix
  • Shindig英语Apache Shindig
  • Shiro
  • Sling英语Apache Sling
  • Spark
  • Stanbol英语Apache Stanbol
  • Storm
  • SpamAssassin
  • Sqoop
  • Apache C++标准库英语stdcxx
  • Struts
  • Struts 2
  • Subversion
  • Tapestry
  • Thrift
  • Tiles英语Apache Tiles
  • Tika英语Apache Tika
  • Tomcat
  • Trafficserver
  • Turbine
  • Tuscany
  • UIMA
  • Velocity
  • Wave
  • Wicket
  • Wink英语Apache Wink
  • Xalan英语Xalan
  • Xerces英语Xerces
  • XMLBeans英语XMLBeans
  • ZooKeeper
ASF logo
Commons项目
  • Apache Commons Logging英语Apache Commons Logging
  • BCEL英语Byte Code Engineering Library
  • BSF英语Bean Scripting Framework
  • Commons Daemon英语Commons Daemon
  • Jelly英语Apache Jelly
Lucene项目
  • Lucene Java
  • Lucene.Net英语Lucene.Net
  • Nutch英语Nutch
  • Solr
Hadoop项目
其他项目
  • Batik
  • Chainsaw英语Chainsaw (log file viewer)
  • FOP
  • Log4j
  • XAP英语Apache XAP
  • Log4Net
  • Ivy英语Apache Ivy
孵化器项目
  • XAP英语Apache XAP
  • Samza英语Apache Samza
  • Storm
Apache Attic
  • AxKit英语AxKit
  • Beehive英语Apache Beehive
  • Click英语Apache Click
  • Apache BlueSky英语BlueSky Open Platform
  • Cactus英语Jakarta Cactus
  • Jakarta
  • Excalibur英语Apache Excalibur
  • Harmony
  • HiveMind英语Apache HiveMind
  • Lenya英语Apache Lenya
  • Slide英语Jakarta Slide
  • Shale英语Apache Shale
  • Shindig英语Apache Shindig
  • stdcxx英语Apache C++ Standard Library
  • iBATIS
  • XMLBeans英语XMLBeans
许可证标准
  • 分类 分类
  • 共享资源页面 维基共享