blob: 1aa291224fe05cbf9e2066c1b9d965d90a44a293 [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= 使用 Java DB (Derby) 数据库
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 使用 Java DB (Derby) 数据库 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 使用 Java DB (Derby) 数据库
本文档说明了如何在 NetBeans IDE 中设置与 link:http://www.oracle.com/technetwork/java/javadb/overview/index.html[+Java DB+] 数据库的连接。在建立连接之后,即可开始在 IDE 中使用该数据库,您可以执行的操作包括创建表、用数据填充表、运行 SQL 语句和查询等。
Java DB 数据库是 Sun 支持的 link:http://db.apache.org/derby/[+Apache Derby+] 版本。Java DB 是完全事务型、安全且基于标准的数据库服务器,它全部采用 Java 编写,并且完全支持 SQL、JDBC API 和 Java EE 技术。Java DB 数据库与 link:http://glassfish.dev.java.net/[+GlassFish+] 应用服务器打包在一起,也包含在 link:http://download.oracle.com/javase/6/[+JDK 6+] 中。有关 Java DB 数据库的详细信息,请查阅link:http://www.oracle.com/technetwork/java/javadb/documentation/index.html[+正式文档+]。
image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"]
*要学习本教程,您需要具备以下软件和资源。*
|===
|软件或资源 |要求的版本
|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2、7.3、7.4、8.0、Java EE
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包 (JDK)+] |版本 7 或 8
|Java DB |版本 10.4.x10.5.x
|===
*注:*
* Java DB 是在安装 JDK 7 JDK 8 时安装的(在 Mac OS X 上除外)。如果使用的是 Mac OS X,则可以手动下载并安装 link:http://www.oracle.com/technetwork/java/javadb/downloads/index.html[+Java DB+],也可以使用通过 Java EE 版的 NetBeans IDE 安装程序安装的 Java DB。
== 配置数据库
如果您在 NetBeans IDE 安装中注册了 GlassFish Server,则将自动注册 Java DB。因此,可以向下跳转至<<starting,启动服务器并创建数据库>>。
如果您单独下载了 GlassFish Server,并需要获取有关在 NetBeans IDE 中对其进行注册的帮助,请参见 IDE 的“帮助目录”(F1 键)中的*注册 GlassFish Server 实例*。
如果仅下载了 Java DB 本身,请执行以下步骤。
1. 运行自解压文件。将在与该文件相同的位置创建一个名为 "javadb" 的文件夹。如果仅下载了 Java DB,并且希望将该数据库服务器放在与其解压缩位置不同的位置中,现在应重新对其定位。
2. 在系统上,创建一个新目录,作为数据库服务器的各实例的主目录。例如,可以在 Java DB 根目录 (javadb) 或其他任意位置创建此文件夹。
在继续执行下一步操作之前,应了解 Java DB 根目录的各个组成部分,这一点很重要:
* ``demo`` 子目录包含演示程序。
* ``bin`` 子目录包含用于执行实用程序和设置环境的脚本。
* ``javadoc`` 子目录包含通过源代码注释生成的 API 文档。
* ``docs`` 子目录包含 Java DB 文档。
* ``lib`` 子目录包含 Java DB jar 文件。
== NetBeans IDE 中注册数据库
配置了数据库之后,执行以下步骤在 IDE 中注册 Java DB
1. "Services"(服务)窗口中,右键单击 "Java DB Database"Java DB 数据库)节点,然后选择 "Properties"(属性),以打开 "Java DB Settings"Java DB 设置)对话框。
2. "Java DB Installation"Java DB 安装)文本字段中,输入在上一步中指定的 Java DB 根目录 (javadb) 的路径。
3. 对于 "Database Location"(数据库位置),请使用默认位置(如果已提供位置)。单击 "OK"(确定)。
例如,在 Windows 计算机上,默认位置可能类似于 ``C:\Documents and Settings\username\.netbeans-derby``
image::images/javadb-props.png[title="Java DB 服务器和数据库的默认设置示例"]
*注:*如果 "Database Location"(数据库位置)字段为空,将需要设置数据库所在目录的路径。将需要为数据库创建目录(如果不存在)。
== 启动服务器并创建数据库
"Services"(服务)窗口中右键单击 "Java DB" 节点时,将显示 Java DB 数据库菜单选项。通过这些上下文菜单项,可以启动和停止数据库服务器、创建新的数据库实例,以及在 IDE 中注册数据库服务器(如以上步骤所示)。要启动数据库服务器,请执行以下操作:
1. "Services"(服务)窗口中,右键单击 "Java DB" 节点,然后选择 "Start Server"(启动服务器)。请注意 "Output"(输出)窗口中的以下输出内容,该内容指示服务器已经启动:
image::images/output-start-db.png[]
2. 右键单击 "Java DB" 节点,然后选择 "Create Database"(创建数据库),以打开 "Create Java DB Database"(创建 Java DB 数据库)对话框。
3. 键入 ``contact`` 作为数据库名称。
4. 键入 ``nbuser`` 作为用户名和口令。单击 "OK"(确定)。
image::images/javadb-createdb.png[]
*注:*"Database Location"(数据库位置)是从 GlassFish 安装 Java DB 期间设置的默认位置。如果单独安装了 Java DB,则此位置可能会有所不同。
在创建数据库之后,如果在 "Services"(服务)窗口中展开 "Databases"(数据库)节点,您可以看到 IDE 已创建数据库连接,并且该数据库已添加到 "Java DB" 节点下的列表中。
== 连接到数据库
到目前为止,已在 IDE 中成功启动了数据库服务器并创建了一个名为 ``contact`` 的数据库实例。在 IDE "Services"(服务)窗口中,可以对数据库结构执行以下常见任务。
* 创建、删除和修改表
* 用数据填充表
* 查看表格数据
* 执行 SQL 语句和查询
要开始使用 ``contact`` 数据库,需要创建到该数据库的连接。要连接至 ``contact`` 数据库,请执行以下步骤。
1. "Services"(服务)窗口中展开 "Databases"(数据库)节点,然后找到新数据库和数据库连接节点。
数据库连接节点 (image::images/connection-node-icon.png[]) 显示在 "Databases"(数据库)节点下。数据库名称显示在 "Java DB" 节点下。
image::images/services-window.png[]
*注:*您还将看到作为默认数据库方案的 `sample [app on APP]` 数据库连接。
[start=2]
. 右键单击 *contact* 数据库连接节点 ( ``jdbc:derby://localhost:1527/contact [nbuser on NBUSER]`` ),然后选择 "Connect"(连接)。
"connection node"(连接节点)图标将完全显示出来 (image::images/connection-node-icon.png[]),这表示连接成功。
[start=3]
. 为数据库创建适当的显示名称,方法是右键单击数据库连接节点 ( ``jdbc:derby://localhost:1527/contact [nbuser on NBUSER]`` ),然后选择 "Rename"(重命名)。在文本字段中键入 ``Contact DB`` ,然后单击 "OK"(确定)。
== 创建表
刚创建的 ``contact`` 数据库当前为空。该数据库尚未包含任何表或数据。在 NetBeans IDE 中,可以通过下列任一方法添加数据库表:使用 "Create Table"(创建表)对话框,或输入 SQL 语句并从 SQL 编辑器中直接运行该语句。要了解这两种方法的具体操作步骤,请参见以下部分:
* <<createTable,使用 "Create Table"(创建表)对话框>>
* <<sqlEditor,使用 SQL 编辑器>>
=== 使用 "Create Table"(创建表)对话框
1. 展开 ``Contact DB`` 连接节点,您会看到其中有若干方案子节点。app 方案是适用于本教程的唯一方案。右键单击 APP 节点,然后选择 "Set as Default Schema."(设置为默认方案)。
2. 展开 APP 节点,请注意,该节点下面有三个子文件夹:"Tables"(表)、"Views"(视图)和 "Procedures"(过程)。右键单击 "Tables"(表)节点,然后选择 "Create Table"(创建表)以打开 "Create Table"(创建表)对话框。
3. "Table Name"(表名称)文本字段中,键入 ``FRIENDS``
4. 单击 "Add Column"(添加列)。随即出现 "Add Column"(添加列)对话框。
5. 在列的 "Name"(名称)中,输入 ``id`` 。对于数据 "Type"(类型),从下拉列表中选择 ``INTEGER``
6. "Constraints"(约束)下,选中 "Primary Key"(主键)复选框以将此列指定为表的主键。关系数据库中的所有表都必须包含主键。请注意,在选中 "Primary Key"(主键)复选框时,还将会自动选中 "Index"(索引)和 "Unique"(唯一)复选框,而 "Null"(空值)复选框则会取消选中。这是因为主键用于标识数据库中的唯一行,并且默认情况下用作表索引。由于必须标识所有行,因此主键不能包含 ```` 值。
image::images/add-column.png[]
7. 接下来,重复执行此过程,以便指定下表中所示的字段:
|===
|Key(键) |Index(索引) |Null(空值) |Unique(唯一) |Column Name(列名) |Data Type(数据类型) |Size(大小)
|[选中] |[选中] |[选中] |id |INTEGER |0
|[选中] |firstName |VARCHAR |20
|[选中] |lastName |VARCHAR |20
|[选中] |nickName |VARCHAR |30
|[选中] |friendSince |DATE |0
|[选中] |email |VARCHAR |60
|===
您将创建一个名为 ``FRIENDS`` 的表,其中为每条联系人记录包含以下数据:
* *名字*
* *姓氏*
* *昵称*
* *交友开始日期*
* *电子邮件地址*
image::images/create-table-friends.png[]
[start=9]
. 在确保 "Create Table"(创建表)对话框包含与上图所示相同的内容后,单击 "OK"(确定)。IDE 会在数据库中生成 ``FRIENDS`` 表,并且您可以看到 "Tables"(表)节点下显示一个新的 ``FRIENDS`` 表节点 (image::images/table-node.png[])。在表节点下将列出从主键 (image::images/primary-key-icon.png[]) 开始的各个列 (字段)。
image::images/friends-table.png[]
=== 使用 SQL 编辑器:
1. "Service"(服务)窗口中,右键单击 ``Contact DB`` 连接节点或该节点下的 "Tables"(表)节点,然后选择 "Execute Command"(执行命令)。会在 SQL 编辑器的主窗口中打开一个空画布。
2. SQL 编辑器中输入以下查询。这是将要创建的 COLLEAGUES 表的表定义:
[source,sql]
----
CREATE TABLE "COLLEAGUES" (
"ID" INTEGER not null primary key,
"FIRSTNAME" VARCHAR(30),
"LASTNAME" VARCHAR(30),
"TITLE" VARCHAR(10),
"DEPARTMENT" VARCHAR(20),
"EMAIL" VARCHAR(60)
);
----
*请注:*SQL 编辑器中形成的语句和查询将以结构化查询语言进行解析。SQL 遵循严格的语法规则,在 IDE 的编辑器中工作时应先熟悉一下这些规则。根据不同的数据库管理系统,SQL 语法也会有所不同。有关详细的准则,请参见《link:http://www.oracle.com/technetwork/java/javadb/documentation/index.html[+JavaDB 参考手册+]》。
[start=3]
. 单击编辑器顶部任务栏中的 "Run SQL"(运行 SQL)(image::images/run-sql-button.png[]) 按钮(Ctrl-Shift-E 组合键)以执行查询。在 "Output"(输出)窗口(Ctrl-4 组合键)中,将显示一条消息,指示已成功执行该语句。
image::images/run-query.png[]
[start=4]
. 要验证更改,请在 "Services"(服务)窗口中右键单击 ``Contact DB`` 连接节点,然后选择 "Refresh"(刷新)。此操作会将运行时 UI 组件更新为指定数据库的当前状态。当从 NetBeans IDE 中的 SQL 编辑器运行查询时,必须执行此步骤。您会看到,现在新的 COLLEAGUES 表节点 (image::images/table-node.png[]) 显示在 "Services"(服务)窗口中的 "Tables"(表)下。
== 添加表数据
现在,您已在 ``contact`` 数据库中创建了一个或多个表,接下来可以开始用数据填充表。您可以使用多种方法向表中添加记录。
* SQL 编辑器中<<sqlstatement,编写 SQL 句>>,为表方案中的每个字段提供值。
* <<usesqleditor,使用 SQL 编辑器>>将记录添加到表中。
* <<using,使用外部 SQL 脚本>>将记录导入到表中。
阅读下节,了解如何使用用数据填充 ``FRIENDS`` 表的所有方法。
=== 运行 SQL 语句
1. "Services"(服务)窗口中展开 ``Contact DB`` 节点下的 "Tables"(表),右键单击 ``FRIENDS`` 表,然后选择 "Execute Command"(执行命令)以打开 "SQL Editor"SQL 编辑器)窗口。
2. SQL 编辑器中,输入以下语句。
[source,sql]
----
INSERT INTO APP.FRIENDS VALUES (1,'Theodore','Bagwell','T-Bag','2004-12-25','tbag@foxriver.com')
----
键入时可以使用 SQL 编辑器代码完成。
[start=3]
. SQL 编辑器中单击鼠标右键,然后选择 "Run Statement"(运行语句)。"Output"(输出)窗口将显示一条消息,指示已成功执行该语句。
. 要验证是否已将新记录添加到 ``FRIENDS`` 表中,请在 "Services"(服务)窗口中右键单击 ``FRIENDS`` 表节点,然后选择 "View Data"(查看数据)。
选择 "View Data"(查看数据)时,在 SQL 编辑器的上方窗格中自动生成一个查询,用于选择表中的所有数据。在 SQL 编辑器的下方窗格中显示该语句的结果。在这种情况下, ``FRIENDS`` 表将显示在下方窗格中。请注意,已添加了一个新行,其中包含刚通过 SQL 语句提供的数据。
image::images/new-record.png[]
=== 使用 SQL 编辑器
1. 右键单击 ``FRIENDS`` 表节点并选择 "View Data"(查看数据)(如果在上一部分的最后一步中没有执行此操作)。
2. 单击 "Insert Record"(插入记录)( ``Alt-I`` ) 按钮以添加一行。
即会显示 "Insert Record"(插入记录)对话框。
[start=3]
. 单击每个单元并输入记录。注意,对于“日期”数据类型的单元,可以从日历中选择一个日期。完成后单击 "OK"(确定)。
image::images/insert-records.png[]
SQL 编辑器中,可以通过单击行表头对结果进行排序、修改和删除现有记录,并查看编辑器中正在执行操作的 SQL 脚本(通过弹出式菜单显示 SQL 脚本命令)。
== 删除表
在下一步中,将使用外部 SQL 脚本创建一个新的 ``COLLEAGUES`` 表。但是,在上文的<<sqlEditor,使用 SQL 编辑器>>部分中刚创建了一个 ``COLLEAGUES`` 表。要确保 SQL 脚本确实创建一个新表,现在可以删除已创建的 ``COLLEAGUES`` 表。要删除数据库表,请执行以下步骤。
1. 在“服务”窗口中展开数据库连接节点下的“表”节点。
2. 右键单击要删除的表,然后选择“删除”。
== 使用外部 SQL 脚本
从外部 SQL 脚本中发出命令是管理数据库的一种常用方式。您可能已在其他位置创建了 SQL 脚本,并希望将其导入到 NetBeans IDE 中,以对指定的数据库运行该脚本。
在本练习中,该脚本将创建一个名为 ``COLLEAGUES`` 的新表,并使用数据填充它。执行以下步骤以在 ``contact`` 数据库中运行该脚本。
1. link:https://netbeans.org/project_downloads/usersguide/colleagues.sql[+colleagues.sql+] 下载到本地系统
2. IDE 的主菜单中选择 "File"(文件)> "Open"(打开)。在文件浏览器中,导航至 ``colleagues.sql`` 文件的保存位置,然后单击 "Open"(打开)。将自动在 SQL 编辑器中打开该脚本。
或者,也可以复制 link:https://netbeans.org/project_downloads/usersguide/colleagues.sql[+colleagues.sql+] 的内容,打开 SQL 编辑器,然后将该文件的内容粘贴到 SQL 编辑器。
[start=3]
. 确保从编辑器顶部工具栏的 "Connection"(连接)下拉框中选择了连接到 ``Contact DB``
image::images/conn-drop-down.png[]
[start=4]
. 单击 "SQL Editor"SQL 编辑器)任务栏中的 "Run SQL"(运行 SQL)(image::images/run-sql-button.png[]) 按钮。将对选定的数据库执行该脚本,并在 "Output"(输出)窗口中生成任何反馈。
. 要验证更改,请在 "Services"(服务)窗口中右键单击 ``Contact DB`` 连接节点,然后选择 "Refresh"(刷新)。请注意,在 "Services"(服务)窗口中的 ``contact`` 下面将显示通过 SQL 脚本创建的新 ``COLLEAGUES`` 表的表节点。
. 要查看新表中包含的数据,请右键单击 ``COLLEAGUES`` 表并选择 "View Data"(查看数据)。通过这种方法,还可以将表格数据与 SQL 脚本中包含的数据进行比较,以查看它们是否匹配。
== 重新创建来自其他数据库的表
如果您有一个来自其他数据库的表,并希望通过 NetBeans IDE 在所使用的数据库中重新创建该表,IDE 为此提供了非常方便的工具。首先,需要在 IDE 中注册第二个数据库,其过程与本教程开始部分描述的过程类似。就本教程而言,请使用与 Java DB 一起打包的 ``sample`` 数据库。此过程实质上分两部分执行:首先“抓取”选定表的表定义,然后在选择的数据库中重新创建该表,具体操作如下所示:
1. 连接至 ``sample`` 数据库,方法是:在 "Services"(服务)窗口中右键单击 "Databases"(数据库)节点下的连接节点,然后选择 "Connect"(连接)(用户名和口令分别为 ``app`` )。
2.
展开 ``sample`` 数据库连接下的 "Tables"(表)节点,右键单击 ``CUSTOMER`` 表节点,然后选择 "Grab Structure"(抓取结构)。
image::images/grab-structure.png[]
[start=3]
. 在打开的 "Grab Table"(抓取表)对话框中,指定计算机上的某一位置,以保存将要创建的抓取文件。单击 "Save"(保存)。
抓取文件记录选定表的定义。
[start=4]
. 展开 ``Contact DB`` 数据库连接下的 "APP schema"APP 方案)节点,右键单击 "Tables"(表)节点,然后选择 "Recreate Table"(重新创建表)以打开 "Recreate Table"(重新创建表)对话框。
. "Recreate Table"(重新创建表)对话框中,导航到 ``CUSTOMER`` 抓取文件的保存位置,然后单击 "Open"(打开)以便打开 "Name the Table"(命名表)对话框。
image::images/recreate-table.png[]
[start=6]
. 此时,可以更改表名称或编辑表定义。否则,请单击 "OK"(确定),以在 ``contact`` 数据库中立即创建表。 ``Contact`` DB 连接节点下将显示新的 ``CUSTOMER`` 表节点。
image::images/new-customer-node.png[]
如果查看新 ``CUSTOMER`` 表中的数据,您将会发现数据库中没有任何记录,但该表的结构与抓取的表结构相同。
link:/about/contact_form.html?to=3&subject=Feedback:%20Working%20With%20Java%20DB[+请将您的反馈意见发送给我们+]
== 另请参见
以下内容是对“使用 Java DB (Derby) 数据库”教程的总结。本教程演示了如何在 NetBeans IDE 中设置 Java DB 数据库连接。接着,演示了如何在 IDE 的“服务”窗口中创建、查看、修改和删除表。此外,本教程还演示了如何使用 SQL 编辑器向表中添加数据,以及如何在 IDE 中使用来自其他数据库的定义重新创建表。
有关更多相关的高级教程,请参见以下资源:
* link:mysql.html[+连接 MySQL 数据库+]。演示了如何在 NetBeans IDE 中配置和连接 MySQL 数据库。
* link:../web/mysql-webapp.html[+使用 MySQL 数据库创建简单的 Web 应用程序+]。说明如何创建连接 MySQL 数据库服务器的简单 Web 应用程序。
* link:http://platform.netbeans.org/tutorials/nbm-crud.html[+NetBeans 平台 CRUD 应用程序教程。+]说明如何将 Java DB 数据库集成到 NetBeans 平台应用程序中。