原文: http://zetcode.com/db/apachederbytutorial/tools/

在本章中,我们提到了 Derby 工具。 Derby 工具和工具是 Derby 随附的一组脚本。 它们通常用于创建,检查和更新 Derby 数据库。

在此页面中,我们将提及sysinfodblookijstartNetworkServerstopNetworkServer工具。

启动 Derby 工具

Derby 工具可以两种方式运行。 我们使用位于 Derby 安装目录的 bin 目录中的脚本名称,也可以使用derbyrun.jar文件启动它们。

  1. $ $DERBY_HOME/bin/ij
  2. $ java -jar $DERBY_HOME/lib/derbyrun.jar ij

我们可以通过在终端中指定脚本名称来启动ij工具。 第二行使用derbyrun.jar文件运行ij

系统信息

sysinfo工具提供有关操作系统,Java 和 Derby 的信息。 它将打印 Java 版本,Java 主目录,操作系统版本,Java 运行时版本,Derby 版本,当前和支持的语言环境。 该工具对于跟踪 Derby 的某些安装或配置问题很有用。

  1. $ $DERBY_HOME/bin/sysinfo
  2. ------------------ Java Information ------------------
  3. Java Version: 1.8.0_111
  4. Java Vendor: Oracle Corporation
  5. Java home: /home/janbodnar/bin/jdk1.8.0_111/jre
  6. 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
  7. OS name: Linux
  8. OS architecture: amd64
  9. OS version: 4.4.0-66-generic
  10. ...

这是特定系统上提供的信息的摘录。

ij

ij是一个交互式脚本工具。 它用于对 Derby 数据库运行脚本或交互式查询。

  1. $ cat cars.sql
  2. SET SCHEMA USER12;
  3. CREATE TABLE CARS(ID BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY
  4. (START WITH 1, INCREMENT BY 1), NAME VARCHAR(30), PRICE INT);
  5. INSERT INTO CARS(Name, Price) VALUES('Audi', 52642);
  6. INSERT INTO CARS(Name, Price) VALUES('Mercedes', 57127);
  7. INSERT INTO CARS(Name, Price) VALUES('Skoda', 9000);
  8. INSERT INTO CARS(Name, Price) VALUES('Volvo', 29000);
  9. INSERT INTO CARS(Name, Price) VALUES('Bentley', 350000);
  10. INSERT INTO CARS(Name, Price) VALUES('Citroen', 21000);
  11. INSERT INTO CARS(Name, Price) VALUES('Hummer', 41400);
  12. INSERT INTO CARS(Name, Price) VALUES('Volkswagen', 21600);

我们有一个cars.sql文件,它创建一个数据库模式和一个CARS表。

  1. $ $DERBY_HOME/bin/ij
  2. ij version 10.11
  3. ij> CONNECT 'jdbc:derby:testdb;user=user12;create=true';

我们启动ij工具。 我们创建一个testdb数据库并建立连接。

  1. ij> SHOW CONNECTIONS;
  2. CONNECTION0* - jdbc:derby:testdb
  3. * = current connection

SHOW CONNECTIONS语句显示与 Derby 数据库的打开的连接。

  1. ij> RUN 'cars.sql';
  2. ij> CREATE SCHEMA USER12;
  3. 0 rows inserted/updated/deleted
  4. ij> CREATE TABLE CARS(ID INT PRIMARY KEY, NAME VARCHAR(30), PRICE INT);
  5. 0 rows inserted/updated/deleted
  6. ij> INSERT INTO CARS VALUES(1, 'Audi', 52642);
  7. 1 row inserted/updated/deleted
  8. ij> INSERT INTO CARS VALUES(2, 'Mercedes', 57127);
  9. 1 row inserted/updated/deleted
  10. ij> INSERT INTO CARS VALUES(3, 'Skoda', 9000);
  11. ...

我们加载并执行cars.sql网站。 我们被告知正在进行的操作。

  1. ij> SELECT * FROM CARS;
  2. ID |NAME |PRICE
  3. ------------------------------------------------------
  4. 1 |Audi |52642
  5. 2 |Mercedes |57127
  6. 3 |Skoda |9000
  7. 4 |Volvo |29000
  8. 5 |Bentley |350000
  9. 6 |Citroen |21000
  10. 7 |Hummer |41400
  11. 8 |Volkswagen |21600
  12. 8 rows selected

我们从CARS表中选择所有行。

  1. ij> CONNECT 'jdbc:derby:testdb;shutdown=true';
  2. ERROR 08006: Database 'testdb' shutdown.

在 Derby 中关闭数据库会导致异常。 预期错误 08006。

  1. ij> SHOW CONNECTIONS;
  2. No current connection

连接已关闭。

  1. ij> EXIT;

我们使用EXIT命令退出ij工具。 请注意,每个命令后都有分号。

dblook

dblook工具用于保存数据库对象的数据定义语言,包括表,视图,索引和触发器。

  1. $DERBY_HOME/bin/dblook -d jdbc:derby:testdb
  2. -- Timestamp: 2017-03-13 20:05:43.281
  3. -- Source database is: testdb
  4. -- Connection URL is: jdbc:derby:testdb
  5. -- appendLogs: false
  6. -- ----------------------------------------------
  7. -- DDL Statements for schemas
  8. -- ----------------------------------------------
  9. CREATE SCHEMA "USER12";
  10. -- ----------------------------------------------
  11. -- DDL Statements for tables
  12. -- ----------------------------------------------
  13. CREATE TABLE "USER12"."CARS" ("ID" INTEGER NOT NULL, "NAME" VARCHAR(30), "PRICE" INTEGER);
  14. CREATE TABLE "APP"."CARS" ("ID" BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "NAME" VARCHAR(30), "PRICE" INTEGER);
  15. -- ----------------------------------------------
  16. -- DDL Statements for keys
  17. -- ----------------------------------------------
  18. -- PRIMARY/UNIQUE
  19. ALTER TABLE "APP"."CARS" ADD CONSTRAINT "SQL170313140819740" PRIMARY KEY ("ID");
  20. ALTER TABLE "USER12"."CARS" ADD CONSTRAINT "SQL170313200304680" PRIMARY KEY ("ID");

在上面的示例中,我们已从testdb数据库中转储了对象。 使用-d选项,我们提供了数据库的连接 URL。 在我们的案例中,dblook工具保存了一个数据库架构和一个表。 使用-o选项,可以将输出重定向到文件。

startNetworkServerstopNetworkServer

这些脚本启动和停止 Derby Network 服务器。 如果是联网服务器,则可以创建到 Derby 数据库的多个连接。

  1. $ $DERBY_HOME/bin/startNetworkServer &
  2. [1] 12421
  3. $ Mon Mar 13 20:12:39 CET 2017 : Security manager installed using the Basic server security policy.
  4. 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 Network Server。

  1. ij> CONNECT 'jdbc:derby://localhost:1527/testdb';

在这里,我们通过 Derby Network Server 连接到testdb数据库。 网络连接的连接 URL 是不同的。

  1. ij> SELECT * FROM USER12.CARS;
  2. ID |NAME |PRICE
  3. ------------------------------------------------------
  4. 1 |Audi |52642
  5. 2 |Mercedes |57127
  6. 3 |Skoda |9000
  7. 4 |Volvo |29000
  8. 5 |Bentley |350000
  9. 6 |Citroen |21000
  10. 7 |Hummer |41400
  11. 8 |Volkswagen |21600
  12. 8 rows selected

我们从CARS表中选择所有汽车。 由于我们没有在连接 URL 中提供数据库模式,因此我们现在必须指定它。 数据库模式是用户名; 在我们的情况下USER12

  1. $ $DERBY_HOME/bin/stopNetworkServer
  2. Mon Mar 13 20:15:42 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) shutdown
  3. $ Mon Mar 13 20:15:42 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) shutdown

我们已经使用stopNetworkServer脚本停止了服务器。

NetworkServerControl

NetworkServerControl是一个系统工具,可以启动和停止 Derby 网络服务器并配置或检索诊断信息。 除ping以外,所有命令只能从运行服务器的计算机上执行。

  1. $ $DERBY_HOME/bin/NetworkServerControl start &

使用start命令,我们启动 Derby 服务器。

  1. $ $DERBY_HOME/bin/NetworkServerControl ping
  2. Tue Mar 21 15:53:29 CET 2017 : Connection obtained for host: localhost, port number 1527.

ping命令测试 Derby 服务器是否已启动。

  1. $ $DERBY_HOME/bin/NetworkServerControl sysinfo
  2. --------- Derby Network Server Information --------
  3. Version: CSS10110/10.11.1.2 - (1629631) Build: 1629631 DRDA Product Id: CSS10110
  4. -- listing properties --
  5. derby.drda.traceDirectory=/home/janbodnar/.derby/
  6. derby.drda.maxThreads=0
  7. derby.drda.sslMode=off
  8. derby.drda.keepAlive=true
  9. ...

sysinfo命令提供系统信息。

  1. $ $DERBY_HOME/bin/NetworkServerControl runtimeinfo
  2. --- Derby Network Server Runtime Information ---
  3. ---------- Session Information ---------------
  4. Session # :3
  5. -------------------------------------------------------------
  6. # Connection Threads : 1
  7. # Active Sessions : 1
  8. # Waiting Sessions : 0
  9. Total Memory : 78643200 Free Memory : 75359512

runtimeinfo命令提供有关正在运行的网络服务器的会话,线程,预备语句以及内存使用的大量调试信息。

  1. $ $DERBY_HOME/bin/NetworkServerControl shutdown
  2. Tue Mar 21 15:56:43 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) shutdown
  3. Tue Mar 21 15:56:44 CET 2017 : Apache Derby Network Server - 10.11.1.2 - (1629631) shutdown

shutdown命令停止 Derby 服务器。

在本章中,我们写了有关 Derby 工具的文章。