// 
//     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.
//

= 从 NetBeans IDE 连接到 Oracle 数据库
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 从 NetBeans IDE 连接到 Oracle 数据库 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 从 NetBeans IDE 连接到 Oracle 数据库

NetBeans IDE 包括对 Oracle 数据库的内置支持。您可以轻松地从 IDE 建立连接，并开始使用数据库。本教程介绍了如何使用本地安装的 Oracle Database 10_g_ Express Edition (Oracle Database XE)，这是一种可免费开发、部署和分发的小型数据库。

本文档说明了如何从 NetBeans IDE <<connect,建立到本地安装>>的 Oracle Database XE 的连接、如何使用 IDE 的内置 SQL 编辑器<<createuser,处理数据库数据>>，以及如何<<oci8,启用 OCI 8 PHP 扩展>>以编写连接到 Oracle 数据库的 PHP 代码。


*要学习本教程，您需要具备以下软件和资源。*

|===
|软件或资源 |要求的版本 

|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 

|link:http://www.oracle.com/technetwork/database/express-edition/overview/index.html[+Oracle Database XE+] |10 _g_ Express Edition 

|link:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html[+Oracle JDBC 驱动程序+] |link:http://download.oracle.com/otn/utilities_drivers/jdbc/11202/ojdbc6.jar[+ojdbc6.jar+] 
|===


== 开始之前

在开始学习本教程之前，请注意以下事项：

* 本教程介绍了如何连接到本地系统上安装的 Oracle Database XE 实例，但这些步骤也适用于连接到远程实例。如果要连接到本地实例，您需要link:http://www.oracle.com/technetwork/database/express-edition/overview/index.html[+下载+]并安装 Oracle Database XE。安装过程非常简单直观，但如果遇到问题，请参见适用于您的平台的《link:http://www.oracle.com/pls/xe102/homepage[+Oracle Database XE 安装指南+]》。
* 有两种类型的 Oracle JDBC 驱动程序：OCI 和 JDBC Thin。
* Oracle 的 JDBC Thin 驱动程序基于 Java，而与平台无关。该独立驱动程序不要求有其他 Oracle 库，并允许直接连接到 Oracle 数据库。本教程使用该驱动程序说明如何连接到 Oracle 数据库。在开始学习本教程之前，您需要link:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html[+下载+]  ``ojdbc6.jar``  文件并将其保存到您的系统上。

*Windows 用户注意事项：*Windows 可能会将下载文件的扩展名从 .jar 更改为 .zip。不过，它仍是 .jar 文件。您可以将该文件重命名为 .jar。

* Oracle 的 OCI 驱动程序使用 Oracle 的本机客户端库与数据库通信。这些库是作为 Oracle Instant Client 的一部分获取的。虽然大多数情况下使用 Thin 驱动程序就足够了，但也可能需要按照<<oci,将 OCI JDBC 驱动程序与 NetBeans IDE 一起使用>>中的步骤使用 OCI 驱动程序。
使用 OCI 驱动程序的一个很好的例子是，在 PHP 应用程序中使用 Oracle Instant Client 库访问远程 Oracle 数据库。有关如何启用 OCI8 PHP 扩展的信息，请参见本教程中的 <<oci8,OCI 8 PHP 扩展和适用于 PHP 的 NetBeans IDE>> 部分。
* 如果从未使用过 Oracle Database XE，则需要获取 Oracle Database XE link:http://download.oracle.com/docs/cd/B25329_01/doc/admin.102/b25610/toc.htm[+使用入门教程+]。

*GlassFish 用户警告：*默认情况下，用于管理数据库的 Oracle Database XE 主页使用端口 8080。默认情况下，Oracle GlassFish Application Server 也使用端口 8080。如果同时运行这两个程序，则 Oracle Database XE 会阻止浏览器访问 GlassFish（位于 localhost:8080）。在这种情况下，GlassFish 上部署的所有应用程序都返回 404。简单的解决方案是，在运行 GlassFish 时，关闭不需要用到的 Oracle Database XE。如果需要同时运行这两个程序，请更改 Oracle Database XE 使用的默认端口。这比更改 GlassFish 的默认端口要简单。Internet 上提供了很多有关更改 Oracle Database XE 默认端口的指令集，包括 link:https://forums.oracle.com/forums/thread.jspa?threadID=336855[+Oracle 论坛+]中的指令集。


== 建立到 Oracle 数据库的连接

在本练习中，将测试并建立到数据库的新连接。

1. 启动 Oracle 数据库。
2. 打开 "Services"（服务）窗口（"Window"（窗口）> "Services"（服务）或按 Ctrl-5 组合键；在 Mac 上按 ⌘-5 组合键）。在 "Services"（服务）窗口中，右键单击 "Databases"（数据库）节点，然后选择 "New Connection"（新建连接）。 

image::images/new-connection.png[]


. 在新建连接向导中，从 "Driver"（驱动程序）下拉列表中选择 "Oracle Thin"。
. 单击 "Add"（添加），然后找到以前下载的文件  ``ojdbc6.jar`` 。单击 "Next"（下一步）。
. 在该向导的 "Customize Connection"（定制连接）面板中输入以下值，然后单击 "Next"（下一步）。

|===

|名称 |值 

|Driver Name（驱动程序名称） |Oracle Thin（带有服务 ID (SID)） 

|Host（主机） | ``localhost``  或 127.0.0.1。
_注_：对于远程连接，请提供安装了该数据库的计算机的 IP 地址或可解析主机名。 

|Port（端口） |1521（默认值） 

|Service ID (SID)（服务 ID (SID)） | ``XE`` （Oracle Database XE 的默认 SID）。
_注_：如果要连接到远程数据库，请要求数据库管理员为您提供数据库 SID。 

|Username（用户名） |

请输入用户名。
就本教程而言，请输入  ``system`` （默认数据库管理员帐户）和安装数据库期间使用的口令。

 

|Password |输入与选定用户名相对应的口令。 
|===


. 单击 "Test Connection"（测试连接），以确认 IDE 能否连接到数据库。单击 "Next"（下一步）。

如果尝试成功，则会在向导中显示 "Connection succeeded"（连接成功）消息。

image::images/customize-conn.png[]


. 在 "Select Schema"（选择方案）下拉列表中选择  ``HR`` 。单击 "Finish"（完成）。

NOTE: 您需要解锁 HR 方案，然后才能在 NetBeans 中访问它。解锁 HR 数据库在 Oracle Database XE link:http://download.oracle.com/docs/cd/B25329_01/doc/admin.102/b25610/toc.htm[+使用入门教程+]中进行了介绍。

此时将在 "Services"（服务）窗口的 "Databases"（数据库）节点下面显示新连接。您可以展开该连接，然后开始浏览数据库对象的结构。
更改连接节点的显示名称：从节点的弹出式菜单中选择 "Properties"（属性），然后单击 "Display Name"（显示名称）属性的省略号按钮。输入 OracleDB 作为显示名称，然后单击 "OK"（确定）。

image::images/connection.png[]

NOTE: 虽然以上步骤说明的是连接到本地数据库实例的情况，连接到_远程_数据库的步骤也相同。唯一的区别是，输入安装 Oracle 数据库的远程计算机的 IP 地址或主机名，而不是将  ``localhost``  指定为主机名。


== 处理 Oracle 数据库中的数据

与数据库进行交互的一种常见方法是，在 SQL 编辑器中运行 SQL 命令或使用数据库管理界面。例如，Oracle Database XE 具有基于浏览器的界面，您可以通过该界面管理数据库，管理数据库对象以及处理数据。

虽然可以通过 Oracle 数据库管理界面执行大多数与数据库有关的任务，但在本教程中，我们介绍如何使用 NetBeans IDE 中的 SQL 编辑器执行其中的一些任务。以下练习介绍了如何创建新用户、如何快速重新创建表，以及如何复制表数据。


=== 创建用户

让我们创建一个新数据库用户帐户以处理数据库中的表和数据。要创建新的用户，您必须使用数据库管理员帐户登录。在本示例中，我们使用在安装数据库期间创建的默认  ``system``  帐户。

1. 在 "Services"（服务）窗口中，右键单击 "OracleDB" 连接节点，然后选择 "Execute Command"（执行命令）。此时将打开 NetBeans IDE 的 SQL 编辑器，您可以在其中输入将发送到数据库的 SQL 命令。

image::images/execute.png[]


. 要创建新用户，请在 "SQL Editor"（SQL 编辑器）窗口中输入以下命令，然后单击工具栏上的 "Run SQL"（运行 SQL）按钮。 

image::images/create-user.png[]

[source,sql]
----

create user jim identified by mypassword default tablespace users temporary tablespace temp quota unlimited on users;
----

该命令可创建新用户  ``jim`` ，口令为  ``mypassword`` 。默认表空间为  ``users`` ，且分配的空间不受限制。


. 下一步是为  ``jim``  用户帐户授予在数据库中执行操作的权限。我们需要允许该用户连接到数据库，在用户默认表空间中创建和修改表以及访问  ``hr``  样例数据库中的  ``Employees``  表。

实际上，数据库管理员可创建定制角色，并微调每个角色的权限。但就本教程而言，我们可以使用预定义的角色，例如  ``CONNECT`` 。有关角色和权限的详细信息，请参见 link:http://download.oracle.com/docs/cd/E11882_01/network.112/e16543/toc.htm[+Oracle 数据库安全指南+]。


[source,sql]
----
grant connect to jim;
grant create table to jim;
grant select on hr.departments to jim;
----


=== Oracle 数据库中的表空间

表空间是任何 Oracle 数据库的逻辑数据库存储单元。事实上，数据库的所有数据都存储在表空间中。您可以在分配的表空间中创建表。如果未明确为用户指定默认表空间，则默认使用系统表空间（最好避免出现这种情况）。

有关表空间概念的详细信息，请参见 link:http://www.orafaq.com/wiki/Tablespace[+Oracle 常见问题解答：表空间+]



=== 创建表

可以使用几种方法通过 NetBeans IDE 在数据库中创建表。例如，您可以运行 SQL 文件（右键单击文件并选择 "Run File"（运行文件）），执行 SQL 命令（右键单击连接节点并选择 "Execute Command"（执行命令））或使用 "Create Table"（创建表）对话框（右键单击 "Tables"（表）节点并选择 "Create Table"（创建表））。在本练习中，将使用一个表的结构重新创建另一个表。

在本示例中，您希望用户  ``jim``  通过  ``hr``  数据库重新创建  ``Departments``  表，以便在其方案中创建该表的副本。在创建该表之前，您需要与服务器断开连接，然后以用户  ``jim``  身份登录。

1. 在 "Services"（服务）窗口中右键单击  ``OracleDB``  连接节点，然后选择 "Disconnect"（断开连接）。
2. 右键单击  ``OracleDB``  连接节点，选择 "Connect"（连接），然后以  ``jim``  身份登录。
3. 展开 "HR" 方案下面的 "Tables"（表）节点，然后确认用户  ``jim``  只能访问  ``Departments``  表。

在创建用户  ``jim``  后，选择权限仅限于  ``Departments``  表。

image::images/hr-view.png[]


. 右键单击  ``Departments``  表节点，然后选择 "Grab Structure"（抓取结构）。将  ``.grab``  文件保存到磁盘上。
. 展开  ``JIM``  方案，右键单击  ``Tables`` （表）节点，然后选择 "Recreate Table"（重新创建表）。
指向您创建的  ``.grab``  文件。 

image::images/recreate.png[]


. 查看用于创建表的 SQL 脚本。单击 "OK"（确定）。

image::images/nametable.png[]

单击 "OK"（确定）时，将会创建新的  ``DEPARTMENTS``  表，并在  ``JIM``  方案节点下面显示该表。如果右键单击表节点并选择 "View Data"（查看数据），则会看到该表是空的。

如果要将原始  ``Departments``  表中的数据复制到新表，则既可在表编辑器中手动输入数据，也可针对新表运行 SQL 脚本以填充该表。

*要手动输入数据，请执行以下步骤。*

1. 右键单击  ``JIM``  方案下方的  ``DEPARTMENTS``  表，然后选择 "View Data"（查看数据）。
2. 单击 "View Data"（查看数据）工具栏上的 "Insert Record"（插入记录）图标，以打开 "Insert Record"（插入记录）窗口。 

image::images/insert-rec.png[]


. 在字段中以键入方式输入数据。单击 "OK"（确定）。

例如，可以输入从原始  ``DEPARTMENTS``  表中提取的以下值。

|===
|列 |值 

|DEPARTMENT_ID |10 

|DEPARTMENT_NAME |Administration 

|MANAGER_ID |200 

|LOCATION_ID |1700 
|===

*要使用 SQL 脚本填充表，请执行以下步骤。*

1. 右键单击  ``JIM``  方案下方的  ``DEPARTMENTS``  表，然后选择 "Execute Command"（执行命令）。
2. 在 "SQL Command"（SQL 命令）标签中输入脚本。单击工具栏中的 "Run"（运行）按钮。

以下脚本使用原始表中的数据填充新表的第一行。


[source,sql]
----
INSERT INTO JIM.DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID) VALUES (10, 'Administration', 200, 1700);
----

您可以通过执行以下步骤，获取使用原始表填充新表的 SQL 脚本。

1. 右键单击  ``HR``  方案下方的  ``DEPARTMENTS``  表，然后选择 "View Data"（查看数据）。
2. 在 "View Data"（查看数据）窗口中选择所有行，在该表中右键单击，然后从弹出式菜单中选择 "Show SQL Script for INSERT"（显示 INSERT 的 SQL 脚本），以打开包含脚本的 "Show SQL"（显示 SQL）对话框。

然后，您可以复制该脚本并根据需要进行修改，在您的表中插入数据。

有关使用 SQL 编辑器的详细信息，请参见<<tips,提示>>。


=== 使用表数据

要使用表数据，可以利用 NetBeans IDE 中的 SQL 编辑器。通过运行 SQL 查询，可以添加、修改和删除数据库结构中保留的数据。

首先，在  ``jim``  方案中创建第二个名为 Locations 的表（仍然使用 jim 的用户帐户登录）。这一次，我们只需要在 IDE 中运行现成的 SQL 文件即可：

1. 下载 link:https://netbeans.org/project_downloads/samples/Samples/Java/locations.sql[+locations.sql+] 文件并将其保存到计算机上的 _USER_HOME_ 目录中。
2. 打开 IDE 的 "Favorites"（收藏夹）窗口，然后找到  ``locations.sql``  文件。

要打开 "Favorites"（收藏夹）窗口，请在主菜单中单击 "Window"（窗口）> "Favorites"（收藏夹）（按 Ctrl-3 组合键）。默认情况下，将在 "Favorites"（收藏夹）窗口中列出 _USER_HOME_ 目录。


. 右键单击  ``locations.sql``  文件，然后选择 "Run File"（运行文件）。

image::images/run-file.png[]

NOTE: 如果有多个数据库连接注册到 IDE，则 IDE 可能会提示您选择正确的连接。


. 在 "Services"（服务）窗口中，右键单击 "Tables"（表）节点，然后在弹出式菜单中选择 "Refresh"（刷新）。

您可以看到在  ``JIM``  方案中添加了包含数据的  ``Locations``  表。

image::images/second-table.png[]


. 右键单击 Locations 表节点，然后选择 "View Data"（查看数据）以查看表内容。您将看到 Locations 表的内容。
您可以直接在此视图窗口中插入新记录和修改现有数据。 

image::images/view-data1.png[]


. 接下来，我们运行一个查询以显示以下两个表中的信息：Departments 和 Locations。

在本示例中，我们使用简单的“自然合并”，因为两个表具有相同的 "location_id" 列，其中保存了相同数据类型的值。这种合并仅选择在匹配 location_id 列中具有相等值的行。

打开 "SQL Command"（SQL 命令）窗口（右键单击  ``JIM``  方案下面的  ``Tables`` （表）节点，然后选择 "Execute Command"（执行命令）），输入以下 SQL 语句，然后单击 "Run SQL"（运行 SQL）图标。


[source,sql]
----

SELECT DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID, STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE 
FROM departments NATURAL JOIN locations
ORDER by DEPARTMENT_NAME;
----

该 SQL 查询返回 Departments 表中的 location_id 值与 Locations 表中的匹配列值相等的行，并按 Department 名称对结果进行排序。请注意，您无法在此查询结果中直接插入新记录，这与单个表的表示形式不同。

image::images/join.png[]

您可以将 SQL 合并查询保存为视图（右键单击 "View"（视图）节点，然后选择 "Create View"（创建视图）），并在以后需要时方便地运行该视图。为此，应为数据库用户授予我们的样例用户所没有的 "Create View"（创建视图）权限。您可以使用 system 帐户登录，为  ``jim``  授予 "Create View"（创建视图）权限（使用以下 SQL 语句："grant create view to jim;"），然后尝试创建自己的视图。


=== NetBeans IDE SQL 编辑器使用提示

如果学习过本教程前面的内容，则您已使用了 NetBeans IDE SQL 编辑器功能。我们在此处列出了几个可能对您有用的其他 NetBeans IDE SQL 编辑器功能。

1. *数据库表的 GUI 视图*。在 "Services"（服务）窗口中右键单击表节点并选择 "View Data"（查看数据）时，IDE 将显示该表的可视表示形式及其数据（如上图所示）。您还可以在该视图中直接添加、修改和删除表数据。
* 要添加记录，请单击 "Insert Records"（插入记录）image:images/row-add.png[] 图标并在打开的 "Insert Records"（插入记录）窗口中插入新数据。单击 "Show SQL"（显示 SQL）按钮以查看该操作的 SQL 代码。该表将使用新记录自动更新。
* 要修改记录，请在表的 GUI 视图中的任何单元格内直接双击，然后键入新值。在提交更改之前，将使用绿色显示修改的文本。要提交更改，请单击 "Commit Changes"（提交更改）image:images/row-commit.png[] 图标。要取消更改，请单击 "Cancel Edits"（取消编辑）image:images/row-commit.png[] 图标。
* 要删除行，请选择该行并单击 "Delete Selected Records"（删除选定的记录）image:images/row-commit.png[] 图标。

[start=2]
. *保留先前的标签*。在 SQL 编辑器工具栏上单击 "Keep Prior Tabs"（保留先前的标签）image:images/keepoldresulttabs.png[] 图标以保留打开以前查询结果的窗口。如果要比较多个查询的结果，这可能很有用。

[start=3]
. *SQL 历史记录*（Ctrl-Alt-Shift-H 组合键）。使用 SQL 编辑器工具栏上的 "SQL History"（SQL 历史记录）image:images/sql-history.png[] 图标可查看已为每个数据库连接运行的所有 SQL 语句。从下拉列表中选择该连接，查找所需的 SQL 语句，然后单击 "Insert"（插入）将该语句放在 "SQL Command"（SQL 命令）窗口中。

[start=4]
. *连接列表*。如果有多个数据库连接，并需要在 SQL 编辑器中快速切换这几个连接，请使用 "Connections"（连接）下拉列表。

[start=5]
. *运行 SQL 语句*。要运行当前 "SQL Command"（SQL 命令）窗口中的完整语句，请单击 "Run SQL"（运行 SQL）image:images/runsql.png[] 图标。如果您希望只运行 SQL 语句的一部分，请在 "SQL Command"（SQL 命令）窗口中将其选中，右键单击所选内容，然后选择 "Run Selection"（运行选择）。在这种情况下，仅执行所选的部分。



== OCI 8 PHP 扩展和适用于 PHP 的 NetBeans IDE

您可以使用 OCI 8 PHP 扩展和适用于 PHP 的 NetBeans IDE 编写 PHP 代码，以便与 Oracle 数据库通信。使用适用于 PHP 的 NetBeans IDE 和 Oracle 数据库：

1. 按照 link:../../trails/php.html[+PHP 学习资源+]的“配置 PHP 开发环境”部分所述，设置 PHP 环境。请注意，NetBeans IDE 仅支持 PHP 5.2 或 5.3。
2. 在编辑器中打开  ``php.ini``  文件。确保将  ``extension_dir``  属性设置为 PHP 扩展目录。此目录通常为  ``PHP_HOME/ext`` 。例如，在将 PHP 5.2.9 安装到  ``C:``  根目录时， ``extension_dir``  设置应为  ``extension_dir="C:\php-5.2.9\ext"`` 。
3. 找到  ``extension=php_oci8_11g.dll`` （适用于 Oracle 11g）或  ``extension=php_oci8.dll`` （适用于 Oracle 10.2 或 XE）行并取消注释。每次只能启用其中的一个扩展。

*重要说明：*如果  ``php.ini``  中没有这些行，请在 extensions 文件夹中查找 OCI 8 扩展文件。如果 extensions 文件夹中没有 OCI 8 扩展文件，请参见link:http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html[+在 Linux 和 Windows 中安装 PHP 和 Oracle Instant Client+] 以了解 OCI 8 的下载和安装信息。


. 重新启动 Apache。（Windows 用户应重新启动计算机。）
. 运行  ``phpinfo()`` 。如果成功启用了 OCI 8，则会在  ``phpinfo()``  输出中显示 OCI 8 部分。

有关启用 OCI 8 的详细信息（尤其是将 OCI 8 与远程 Oracle DB 服务器一起使用的信息），请参见link:http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html[+在 Linux 和 Windows 中安装 PHP 和 Oracle Instant Client+]。

如果启用了 OCI 8，适用于 PHP 的 NetBeans IDE 将访问该扩展以完成代码并进行调试。

image::images/oci-cc.png[]


== 将 OCI JDBC 驱动程序与 NetBeans IDE 一起使用

OCI 驱动程序包是在与 JDBC Thin 驱动程序 ( ``ojdbc6.jar`` ) 相同的 JAR 文件中提供的。选择使用哪个驱动程序取决于以下接口： ``oracle.jdbc.OracleDriver``  用于 Thin 驱动程序； ``oracle.jdbc.driver.OracleDriver``  用于 OCI 驱动程序。要使用 OCI 驱动程序，还必须安装 Oracle Database Instant Client，因为它包含 OCI 驱动程序与数据库进行通信所需的所有库。

*从 NetBeans IDE 中使用 Oracle OCI 驱动程序连接到 Oracle 数据库：*

1. link:http://www.oracle.com/technetwork/database/features/instant-client/index-100365.html[+下载+]适用于您的平台的基本 Oracle Database Instant Client 软件包。按照link:http://www.oracle.com/technetwork/database/features/instant-client/index-100365.html[+此页+]上的安装说明进行操作。
2. 在 IDE 的 "Services"（服务）窗口中，右键单击 "Databases"（数据库）节点，然后选择 "New Connection"（新建连接）。
3. 在 "Locate Driver"（查找驱动程序）步骤中，选择 "Oracle OCI"，然后单击 "Add"（添加）并指定  ``ojdbc6.jar``  文件。
4. 在 "Customize Connection"（定制连接）对话框中，提供以下连接详细信息：IP 地址、端口、SID、用户名和口令。
请注意 OCI 和 Thin 驱动程序的 JDBC URL 的差别。 

image::images/oci-connection.png[]


== 疑难解答

下面的疑难解答提示仅介绍了我们遇到的几种异常错误。如果此处没有解答您的问题，请自行搜索或使用“发送有关此教程的反馈意见”链接提供建设性反馈。

* 您将会看到类似下面的错误：

[source,bash]
----

Shutting down v3 due to startup exception : No free port within range:
>> 8080=com.sun.enterprise.v3.services.impl.monitor.MonitorableSelectorHandler@7dedad
----
出现这种错误的原因是，GlassFish 应用服务器和 Oracle 数据库均使用端口 8080。如果要同时使用这两个应用程序，您需要更改其中的一个应用程序的默认端口。要重置 Oracle 数据库的默认端口，您可以使用以下命令：

[source,bash]
----

CONNECT SYSTEM/passwordEXEC DBMS_XDB.SETHTTPPORT(<new port number>);
----
* 出现以下错误：

[source,bash]
----

Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor.
----
如果监听程序无法识别连接描述符提供的数据库实例的服务 ID (SID)，则会出现这种错误。出现该异常错误有几个原因。例如，如果未启动 Oracle 数据库，则可能会出现该异常（最简单的情况）。SID 不正确或监听程序无法识别 SID。如果使用默认 SID（例如，Oracle Database Express Edition 的默认 SID 为 XE），则不太可能会出现该问题。SID 包含在  ``tnsnames.ora``  文件的 CONNECT DATA 部分（在 Windows 计算机上，该文件位于  ``%ORACLE_HOME%\network\admin\tnsnames.ora`` ）。
* 出现以下错误： 

[source,bash]
----

ORA-12705: Cannot access NLS data files or invalid environment specified.
----

通常，这表示 NLS_LANG 环境变量包含无效的语言、国家/地区或字符集值。如果属于这种情况，则应在操作系统级别禁用无效的 NLS_LANG 设置。对于 Windows，请在 Windows 注册表的 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 中重命名 NLS_LANG 子键。对于 Linux/Unix，请运行 "unset NLS_LANG" 命令。

link:/about/contact_form.html?to=3&subject=Feedback:%20Connecting%20to%20Oracle%20Database%20from%20NetBeans%20IDE[+请将您的反馈意见发送给我们+]



== 另请参见

有关管理和使用 Oracle 数据库的更多信息，请参见相应的 Oracle 文档。我们在下面简要列出了最常用的文档。

* link:http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/toc.htm[+Oracle 数据库 SQL 参考+]。完整介绍用于处理 Oracle 数据库中信息的 SQL 语句。
* link:http://download.oracle.com/docs/cd/E11882_01/network.112/e16543/toc.htm[+Oracle 数据库安全指南+]。提供并解释在管理 Oracle 数据库时使用的主要概念。
* link:http://st-curriculum.oracle.com/tutorial/DBXETutorial/index.htm[+Oracle Database 10_g_ Express Edition 教程+]。快速而详细地介绍了如何使用 Oracle Database XE。
* link:http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html[+在 Linux 和 Windows 中安装 PHP 和 Oracle Instant Client+]。有关安装 PHP 和 Oracle Instant Client 的直观操作方法文章。

有关如何在 NetBeans IDE 中使用其他数据库的信息，请参见

* link:java-db.html[+使用 Java DB (Derby) 数据库+]
* link:mysql.html[+连接 MySQL 数据库+]
* link:../web/mysql-webapp.html[+使用 MySQL 数据库创建简单的 Web 应用程序+]
