| 原作者 | Cloudscape Inc (Later IBM) |
|---|---|
| 開發者 | Apache软件基金会 |
| 当前版本 |
|
| 源代码库 | |
| 编程语言 | Java |
| 操作系统 | 跨平臺 |
| 类型 | 關聯式資料庫管理系統 |
| 许可协议 | Apache許可證 2.0 |
| 网站 | db |
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和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数据库:
packagetest;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;publicclassEmbeddedDerbyTester{publicstaticvoidmain(String[]args){Stringdriver="org.apache.derby.jdbc.EmbeddedDriver";//在derby.jar里面StringdbName="EmbeddedDB";StringdbURL="jdbc:derby:"+dbName+";create=true";//create=true表示当数据库不存在时就创建它try{Class.forName(driver);Connectionconn=DriverManager.getConnection(dbURL);//启动/连接嵌入式数据库Statementst=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')");//插入一条数据ResultSetrs=st.executeQuery("select * from foo");//读取刚插入的数据while(rs.next()){intid=rs.getInt(1);Stringname=rs.getString(2);System.out.println("id="+id+";name="+name);}}catch(Exceptione){e.printStackTrace();}}}
启动Derby网络服务器的Java程序:
packagetest;importjava.io.PrintWriter;importjava.sql.DriverManager;importorg.apache.derby.drda.NetworkServerControl;publicclassNetworkServerDerbyTester{publicstaticvoidmain(String[]args){Stringdriver="org.apache.derby.jdbc.ClientDriver";//在derbyclient.jar里面StringdbName="NetworkDB";StringconnectionURL="jdbc:derby://localhost:1527/"+dbName+";create=true";try{/* 启动Derby网络服务器,默认端口是1527,也可以通过运行 <Derby_Home>/frameworks/NetworkServer/bin/startNetworkServer.bat 来启动Derby网络服务器;如果是Unix,用startNetworkServer */NetworkServerControlderbyServer=newNetworkServerControl();//NetworkServerControl类在derbynet.jar里面PrintWriterpw=newPrintWriter(System.out);//用系统输出作为Derby数据库的输出derbyServer.start(pw);//启动Derby服务器Class.forName(driver);DriverManager.getConnection(connectionURL);//do something here..........derbyServer.shutdown();//关闭Derby服务器}catch(Exceptionex){ex.printStackTrace();}}}
Apache Derby数据库(即Java DB)的任何connection的当前schema,默认是对应于该用户名的一个schema。如果无用户名被提供,那么当前用户名与当前schema缺省是APP。
但即使当前schema被设置为用户名,这个schema仍然可能不存在。一个schema只能被创建:通过CREATE SCHEMA语句显式创建或者创建一个对象(例如表等)来隐式创建。
APP schema总是存在,不需要创建。
如果你的程序试图访问当前schema但该schema下没有创建任何对象,就会遇到“schema not exists”错误。[3]