ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Derby 工具 > 原文: [http://zetcode.com/db/apachederbytutorial/tools/](http://zetcode.com/db/apachederbytutorial/tools/) 在本章中,我们提到了 Derby 工具。 Derby 工具和工具是 Derby 随附的一组脚本。 它们通常用于创建,检查和更新 Derby 数据库。 在此页面中,我们将提及`sysinfo`,`dblook`,`ij`,`startNetworkServer`和`stopNetworkServer`工具。 ## 启动 Derby 工具 Derby 工具可以两种方式运行。 我们使用位于 Derby 安装目录的 bin 目录中的脚本名称,也可以使用`derbyrun.jar`文件启动它们。 ```java $ $DERBY_HOME/bin/ij $ java -jar $DERBY_HOME/lib/derbyrun.jar ij ``` 我们可以通过在终端中指定脚本名称来启动`ij`工具。 第二行使用`derbyrun.jar`文件运行`ij`。 ## 系统信息 `sysinfo`工具提供有关操作系统,Java 和 Derby 的信息。 它将打印 Java 版本,Java 主目录,操作系统版本,Java 运行时版本,Derby 版本,当前和支持的语言环境。 该工具对于跟踪 Derby 的某些安装或配置问题很有用。 ```java $ $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 数据库运行脚本或交互式查询。 ```java $ 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`表。 ```java $ $DERBY_HOME/bin/ij ij version 10.11 ij> CONNECT 'jdbc:derby:testdb;user=user12;create=true'; ``` 我们启动`ij`工具。 我们创建一个`testdb`数据库并建立连接。 ```java ij> SHOW CONNECTIONS; CONNECTION0* - jdbc:derby:testdb * = current connection ``` `SHOW CONNECTIONS`语句显示与 Derby 数据库的打开的连接。 ```java 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`网站。 我们被告知正在进行的操作。 ```java 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`表中选择所有行。 ```java ij> CONNECT 'jdbc:derby:testdb;shutdown=true'; ERROR 08006: Database 'testdb' shutdown. ``` 在 Derby 中关闭数据库会导致异常。 预期错误 08006。 ```java ij> SHOW CONNECTIONS; No current connection ``` 连接已关闭。 ```java ij> EXIT; ``` 我们使用`EXIT`命令退出`ij`工具。 请注意,每个命令后都有分号。 ## dblook `dblook`工具用于保存数据库对象的数据定义语言,包括表,视图,索引和触发器。 ```java $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 Network 服务器。 如果是联网服务器,则可以创建到 Derby 数据库的多个连接。 ```java $ $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 Network Server。 ```java ij> CONNECT 'jdbc:derby://localhost:1527/testdb'; ``` 在这里,我们通过 Derby Network Server 连接到`testdb`数据库。 网络连接的连接 URL 是不同的。 ```java 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`。 ```java $ $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`以外,所有命令只能从运行服务器的计算机上执行。 ```java $ $DERBY_HOME/bin/NetworkServerControl start & ``` 使用`start`命令,我们启动 Derby 服务器。 ```java $ $DERBY_HOME/bin/NetworkServerControl ping Tue Mar 21 15:53:29 CET 2017 : Connection obtained for host: localhost, port number 1527. ``` `ping`命令测试 Derby 服务器是否已启动。 ```java $ $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`命令提供系统信息。 ```java $ $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`命令提供有关正在运行的网络服务器的会话,线程,预备语句以及内存使用的大量调试信息。 ```java $ $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 工具的文章。