Derby 工具
最后修改于 2020 年 7 月 6 日
在本章中,我们将介绍 Derby 工具。 Derby 工具和实用程序是一组随 Derby 提供的脚本。它们通常用于创建、检查和更新 Derby 数据库。
在本页中,我们将介绍 sysinfo、dblook、ij、startNetworkServer 和 stopNetworkServer 工具。
启动 Derby 工具
Derby 工具可以通过两种方式运行。我们使用位于 Derby 安装目录的 bin 目录中的脚本名称,或者我们可以使用 derbyrun.jar 文件来启动它们。
$ $DERBY_HOME/bin/ij $ java -jar $DERBY_HOME/lib/derbyrun.jar ij
我们可以通过在终端中指定脚本名称来启动 ij 工具。第二行使用 derbyrun.jar 文件运行 ij。
sysinfo
sysinfo 工具提供有关操作系统、Java 和 Derby 的信息。它将打印 Java 版本、Java 主目录、OS 版本、Java 运行时版本、Derby 版本、当前和受支持的区域设置等。该工具可用于跟踪 Derby 的一些安装或配置问题。
$ $DERBY_HOME/bin/sysinfo ------------------ Java Information ------------------ Java Version: 1.8.0_111 Java Vendor: Oracle Corporation Java home: /home/janbodnar/bin/jdk1.8.0_111/jre Java classpath: /home/janbodnar/bin/jdk1.8.0_111/db/lib/derby.jar:/home/janbodnar/bin/jdk1.8.0_111/db/lib/derbynet.jar:/home/janbodnar/bin/jdk1.8.0_111/db/lib/derbytools.jar:/home/janbodnar/bin/jdk1.8.0_111/db/lib/derbyoptionaltools.jar:/home/janbodnar/bin/jdk1.8.0_111/db/lib/derbyclient.jar OS name: Linux OS architecture: amd64 OS version: 4.4.0-66-generic ...
这是特定系统上提供的信息的摘录。
ij
ij 是一个交互式脚本工具。它用于对 Derby 数据库运行脚本或交互式查询。
$ cat cars.sql
SET SCHEMA USER12;
CREATE TABLE CARS(ID BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY
(START WITH 1, INCREMENT BY 1), NAME VARCHAR(30), PRICE INT);
INSERT INTO CARS(Name, Price) VALUES('Audi', 52642);
INSERT INTO CARS(Name, Price) VALUES('Mercedes', 57127);
INSERT INTO CARS(Name, Price) VALUES('Skoda', 9000);
INSERT INTO CARS(Name, Price) VALUES('Volvo', 29000);
INSERT INTO CARS(Name, Price) VALUES('Bentley', 350000);
INSERT INTO CARS(Name, Price) VALUES('Citroen', 21000);
INSERT INTO CARS(Name, Price) VALUES('Hummer', 41400);
INSERT INTO CARS(Name, Price) VALUES('Volkswagen', 21600);
我们有一个 cars.sql 文件,它创建一个数据库模式和一个 CARS 表。
$ $DERBY_HOME/bin/ij ij version 10.11 ij> CONNECT 'jdbc:derby:testdb;user=user12;create=true';
我们启动 ij 工具。我们创建一个 testdb 数据库并连接到它。
ij> SHOW CONNECTIONS; CONNECTION0* - jdbc:derby:testdb * = current connection
SHOW CONNECTIONS 语句显示与 Derby 数据库的已打开连接。
ij> RUN 'cars.sql'; ij> CREATE SCHEMA USER12; 0 rows inserted/updated/deleted ij> CREATE TABLE CARS(ID INT PRIMARY KEY, NAME VARCHAR(30), PRICE INT); 0 rows inserted/updated/deleted ij> INSERT INTO CARS VALUES(1, 'Audi', 52642); 1 row inserted/updated/deleted ij> INSERT INTO CARS VALUES(2, 'Mercedes', 57127); 1 row inserted/updated/deleted ij> INSERT INTO CARS VALUES(3, 'Skoda', 9000); ...
我们加载并执行 cars.sql 站点。我们被告知正在进行的操作。
ij> SELECT * FROM CARS; ID |NAME |PRICE ------------------------------------------------------ 1 |Audi |52642 2 |Mercedes |57127 3 |Skoda |9000 4 |Volvo |29000 5 |Bentley |350000 6 |Citroen |21000 7 |Hummer |41400 8 |Volkswagen |21600 8 rows selected
我们从 CARS 表中选择所有行。
ij> CONNECT 'jdbc:derby:testdb;shutdown=true'; ERROR 08006: Database 'testdb' shutdown.
关闭 Derby 中的数据库会导致异常。预计会发生错误 08006。
ij> SHOW CONNECTIONS; No current connection
连接已关闭。
ij> EXIT;
我们使用 EXIT 命令退出 ij 工具。请注意,每个命令后面都跟有一个分号。
dblook
dblook 工具用于保存数据库对象的 DDL(数据定义语言),包括表、视图、索引和触发器。
$DERBY_HOME/bin/dblook -d jdbc:derby:testdb
-- Timestamp: 2017-03-13 20:05:43.281
-- Source database is: testdb
-- Connection URL is: jdbc:derby:testdb
-- appendLogs: false
-- ----------------------------------------------
-- DDL Statements for schemas
-- ----------------------------------------------
CREATE SCHEMA "USER12";
-- ----------------------------------------------
-- DDL Statements for tables
-- ----------------------------------------------
CREATE TABLE "USER12"."CARS" ("ID" INTEGER NOT NULL, "NAME" VARCHAR(30), "PRICE" INTEGER);
CREATE TABLE "APP"."CARS" ("ID" BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "NAME" VARCHAR(30), "PRICE" INTEGER);
-- ----------------------------------------------
-- DDL Statements for keys
-- ----------------------------------------------
-- PRIMARY/UNIQUE
ALTER TABLE "APP"."CARS" ADD CONSTRAINT "SQL170313140819740" PRIMARY KEY ("ID");
ALTER TABLE "USER12"."CARS" ADD CONSTRAINT "SQL170313200304680" PRIMARY KEY ("ID");
在上面的示例中,我们已经转储了 testdb 数据库中的对象。使用 -d 选项,我们提供了数据库的连接 URL。在我们的例子中,dblook 工具保存了一个数据库模式和一个表。使用 -o 选项,输出可以重定向到文件。
startNetworkServer 和 stopNetworkServer
这些脚本启动和停止 Derby 网络服务器。如果使用网络服务器,可以创建到 Derby 数据库的多个连接。
$ $DERBY_HOME/bin/startNetworkServer & [1] 12421 $ Mon Mar 13 20:12:39 CET 2017 : Security manager installed using the Basic server security policy. Mon Mar 13 20:12:40 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) started and ready to accept connections
在这里,我们使用 startNetworkServer 脚本启动 Derby 网络服务器。
ij> CONNECT 'jdbc:derby://:1527/testdb';
在这里,我们通过 Derby 网络服务器连接到 testdb 数据库。网络连接的连接 URL 不同。
ij> SELECT * FROM USER12.CARS; ID |NAME |PRICE ------------------------------------------------------ 1 |Audi |52642 2 |Mercedes |57127 3 |Skoda |9000 4 |Volvo |29000 5 |Bentley |350000 6 |Citroen |21000 7 |Hummer |41400 8 |Volkswagen |21600 8 rows selected
我们从 CARS 表中选择所有汽车。由于我们没有在连接 URL 中提供数据库模式,因此我们现在必须指定它。数据库模式是用户名;在我们的例子中是 USER12。
$ $DERBY_HOME/bin/stopNetworkServer Mon Mar 13 20:15:42 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) shutdown $ Mon Mar 13 20:15:42 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) shutdown
我们使用 stopNetworkServer 脚本停止了服务器。
NetworkServerControl
NetworkServerControl 是一个系统工具,用于启动和停止 Derby 网络服务器以及配置或检索诊断信息。除了 ping 之外,所有命令只能从服务器运行的机器上执行。
$ $DERBY_HOME/bin/NetworkServerControl start &
使用 start 命令,我们启动 Derby 服务器。
$ $DERBY_HOME/bin/NetworkServerControl ping Tue Mar 21 15:53:29 CET 2017 : Connection obtained for host: localhost, port number 1527.
ping 命令测试 Derby 服务器是否启动。
$ $DERBY_HOME/bin/NetworkServerControl sysinfo --------- Derby Network Server Information -------- Version: CSS10110/10.11.1.2 - (1629631) Build: 1629631 DRDA Product Id: CSS10110 -- listing properties -- derby.drda.traceDirectory=/home/janbodnar/.derby/ derby.drda.maxThreads=0 derby.drda.sslMode=off derby.drda.keepAlive=true ...
sysinfo 命令提供系统信息。
$ $DERBY_HOME/bin/NetworkServerControl runtimeinfo --- Derby Network Server Runtime Information --- ---------- Session Information --------------- Session # :3 ------------------------------------------------------------- # Connection Threads : 1 # Active Sessions : 1 # Waiting Sessions : 0 Total Memory : 78643200 Free Memory : 75359512
runtimeinfo 命令提供有关正在运行的网络服务器的会话、线程、预处理语句和内存使用情况的广泛调试信息。
$ $DERBY_HOME/bin/NetworkServerControl shutdown Tue Mar 21 15:56:43 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) shutdown Tue Mar 21 15:56:44 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) shutdown
shutdown 命令停止 Derby 服务器。
在本章中,我们写了关于 Derby 工具的内容。