blob: a0f4bef11787441a3c7be95f67b3ae1d77ef5a1b [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, 2011, 2012, 2013, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<meta name="description" content="An introductory tutorial describing how to connect
to an Oracle Database in NetBeans IDE">
<meta name="keywords" content="NetBeans, IDE, integrated development environment,
Orace database, SQL, structured query language, multi-user database
management system, Oracle XE, open source">
<link rel="stylesheet" type="text/css" href="../../../netbeans.css">
<script type="text/javascript" src="../../../images_www/js/window_opener.js"></script>
<title>连接 Oracle 数据库 - NetBeans IDE 教程</title><meta HTTP-EQUIV="Content-Type" Content="text/html; charset=UTF-8"></head>
<body>
<h1>从 NetBeans IDE 连接到 Oracle 数据库</h1>
<p>NetBeans IDE 包括对 Oracle 数据库的内置支持。您可以轻松地从 IDE 建立连接,并开始使用数据库。本教程介绍了如何使用本地安装的 Oracle Database 10<em>g</em> Express Edition (Oracle Database XE),这是一种可免费开发、部署和分发的小型数据库。 </p>
<p>本文档说明了如何从 NetBeans IDE <a href="#connect">建立到本地安装</a>的 Oracle Database XE 的连接、如何使用 IDE 的内置 SQL 编辑器<a href="#createuser">处理数据库数据</a>,以及如何<a href="#oci8">启用 OCI 8 PHP 扩展</a>以编写连接到 Oracle 数据库的 PHP 代码。 </p>
<p><strong>目录</strong></p>
<img alt="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0">
<ul class="toc">
<li><a href="#start">开始之前</a> </li>
<li><a href="#connect">建立到 Oracle 数据库的连接</a></li>
<li><a href="#handledata">通过 IDE 处理 Oracle 数据库中的数据</a>
<ul>
<li><a href="#createuser">创建新用户</a></li>
<li><a href="#createtable">创建表</a></li>
<li><a href="#altertable">使用表数据</a></li>
</ul>
</li>
<li><a href="#tips">NetBeans IDE SQL 编辑器使用提示</a></li>
<li><a href="#oci8">OCI 8 PHP 扩展和适用于 PHP 的 NetBeans IDE</a></li>
<li><a href="#oci">将 OCI JDBC 驱动程序与 NetBeans IDE 一起使用</a> </li>
<li><a href="#troubleshoot">疑难解答</a></li>
<li><a href="#seeAlso">另请参见</a></li>
</ul>
<p><strong>要学习本教程,您需要具备以下软件和资源。</strong></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">软件或资源</th>
<th class="tblheader" scope="col">要求的版本</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html" target="_blank">NetBeans IDE</a></td>
<td class="tbltd1">7.2、7.3、7.4、8.0、Java EE 包</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Java 开发工具包 (JDK)</a></td>
<td class="tbltd1">版本 7 或 8</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/database/express-edition/overview/index.html" target="_blank">Oracle Database XE</a></td>
<td class="tbltd1">10 <em>g</em> Express Edition</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html" target="_blank">Oracle JDBC 驱动程序</a></td>
<td class="tbltd1"><a href="http://download.oracle.com/otn/utilities_drivers/jdbc/11202/ojdbc6.jar" target="_blank">ojdbc6.jar</a></td>
</tr>
</tbody>
</table>
<h2><a id="start" name="start"></a>开始之前</h2>
<p>在开始学习本教程之前,请注意以下事项: </p>
<ul>
<li>本教程介绍了如何连接到本地系统上安装的 Oracle Database XE 实例,但这些步骤也适用于连接到远程实例。如果要连接到本地实例,您需要<a href="http://www.oracle.com/technetwork/database/express-edition/overview/index.html" target="_blank">下载</a>并安装 Oracle Database XE。安装过程非常简单直观,但如果遇到问题,请参见适用于您的平台的《<a href="http://www.oracle.com/pls/xe102/homepage" target="_blank">Oracle Database XE 安装指南</a>》。</li>
<li>有两种类型的 Oracle JDBC 驱动程序:OCI 和 JDBC Thin。
<ul>
<li>Oracle 的 JDBC Thin 驱动程序基于 Java,而与平台无关。该独立驱动程序不要求有其他 Oracle 库,并允许直接连接到 Oracle 数据库。本教程使用该驱动程序说明如何连接到 Oracle 数据库。在开始学习本教程之前,您需要<a href="http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html" target="_blank">下载</a> <tt>ojdbc6.jar</tt> 文件并将其保存到您的系统上。 <p class="notes"><b>Windows 用户注意事项:</b>Windows 可能会将下载文件的扩展名从 .jar 更改为 .zip。不过,它仍是 .jar 文件。您可以将该文件重命名为 .jar。</p></li>
<li>Oracle 的 OCI 驱动程序使用 Oracle 的本机客户端库与数据库通信。这些库是作为 Oracle Instant Client 的一部分获取的。虽然大多数情况下使用 Thin 驱动程序就足够了,但也可能需要按照<a href="#oci">将 OCI JDBC 驱动程序与 NetBeans IDE 一起使用</a>中的步骤使用 OCI 驱动程序。<br> 使用 OCI 驱动程序的一个很好的例子是,在 PHP 应用程序中使用 Oracle Instant Client 库访问远程 Oracle 数据库。有关如何启用 OCI8 PHP 扩展的信息,请参见本教程中的 <a href="#oci8">OCI 8 PHP 扩展和适用于 PHP 的 NetBeans IDE</a> 部分。</li>
</ul>
</li>
<li>如果从未使用过 Oracle Database XE,则需要获取 Oracle Database XE <a href="http://download.oracle.com/docs/cd/B25329_01/doc/admin.102/b25610/toc.htm">使用入门教程</a></li></ul>
<p class="alert"><strong>GlassFish 用户警告:</strong>默认情况下,用于管理数据库的 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 默认端口的指令集,包括 <a href="https://forums.oracle.com/forums/thread.jspa?threadID=336855">Oracle 论坛</a>中的指令集。</p>
<h2><a id="connect" name="connect"></a>建立到 Oracle 数据库的连接</h2>
<p>在本练习中,将测试并建立到数据库的新连接。 </p>
<ol>
<li>启动 Oracle 数据库。</li>
<li>打开 "Services"(服务)窗口("Window"(窗口)> "Services"(服务)或按 Ctrl-5 组合键;在 Mac 上按 ⌘-5 组合键)。在 "Services"(服务)窗口中,右键单击 "Databases"(数据库)节点,然后选择 "New Connection"(新建连接)。 <br> <img alt="&quot;Databases&quot;(数据库)节点弹出菜单中的 &quot;New Connection&quot;(新建连接)项" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/new-connection.png"></li>
<li>在新建连接向导中,从 "Driver"(驱动程序)下拉列表中选择 "Oracle Thin"。</li>
<li>单击 "Add"(添加),然后找到以前下载的文件 <tt>ojdbc6.jar</tt>。单击 "Next"(下一步)。 </li>
<li>在该向导的 "Customize Connection"(定制连接)面板中输入以下值,然后单击 "Next"(下一步)。<br>
<table width="85%" >
<tr>
<th width="25%" class="tblheader" scope="col">名称</th>
<th width="75%" class="tblheader" scope="col"></th>
</tr>
<tr>
<td class="tbltd1">Driver Name(驱动程序名称) </td>
<td class="tbltd1">Oracle Thin(带有服务 ID (SID)) </td>
</tr>
<tr>
<td class="tbltd1">Host(主机)</td>
<td class="tbltd1"><tt>localhost</tt> 或 127.0.0.1。<br> <em></em>:对于远程连接,请提供安装了该数据库的计算机的 IP 地址或可解析主机名。 </td>
</tr>
<tr>
<td class="tbltd1">Port(端口)</td>
<td class="tbltd1">1521(默认值)</td>
</tr>
<tr>
<td class="tbltd1">Service ID (SID)(服务 ID (SID)) </td>
<td class="tbltd1"><tt>XE</tt>(Oracle Database XE 的默认 SID)。<br> <em></em>:如果要连接到远程数据库,请要求数据库管理员为您提供数据库 SID。 </td>
</tr>
<tr>
<td class="tbltd1">Username(用户名)</td>
<td class="tbltd1"><p>请输入用户名。<br> 就本教程而言,请输入 <tt>system</tt>(默认数据库管理员帐户)和安装数据库期间使用的口令。 </p></td>
</tr>
<tr>
<td class="tbltd1">Password</td>
<td class="tbltd1">输入与选定用户名相对应的口令。 </td>
</tr>
</table>
</li>
<li>单击 "Test Connection"(测试连接),以确认 IDE 能否连接到数据库。单击 "Next"(下一步)。
<p>如果尝试成功,则会在向导中显示 "Connection succeeded"(连接成功)消息。 </p>
<img alt="已建立连接" border="0" class="margin-around" height="471" src="../../../images_www/articles/73/ide/oracle-db/customize-conn.png" width="378"></li>
<li>在 "Select Schema"(选择方案)下拉列表中选择 <tt>HR</tt>。单击 "Finish"(完成)。
<p class="notes"><b>注:</b>您需要解锁 HR 方案,然后才能在 NetBeans 中访问它。解锁 HR 数据库在 Oracle Database XE <a href="http://download.oracle.com/docs/cd/B25329_01/doc/admin.102/b25610/toc.htm">使用入门教程</a>中进行了介绍。</p></li>
</ol>
<p>此时将在 "Services"(服务)窗口的 "Databases"(数据库)节点下面显示新连接。您可以展开该连接,然后开始浏览数据库对象的结构。<br> 更改连接节点的显示名称:从节点的弹出式菜单中选择 "Properties"(属性),然后单击 "Display Name"(显示名称)属性的省略号按钮。输入 OracleDB 作为显示名称,然后单击 "OK"(确定)。</p>
<img alt="已建立连接" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/connection.png"><br>
<p class="notes"><strong>注:</strong>虽然以上步骤说明的是连接到本地数据库实例的情况,连接到<em>远程</em>数据库的步骤也相同。唯一的区别是,输入安装 Oracle 数据库的远程计算机的 IP 地址或主机名,而不是将 <tt>localhost</tt> 指定为主机名。</p>
<h2><a name="handledata"></a>处理 Oracle 数据库中的数据 </h2>
<p>与数据库进行交互的一种常见方法是,在 SQL 编辑器中运行 SQL 命令或使用数据库管理界面。例如,Oracle Database XE 具有基于浏览器的界面,您可以通过该界面管理数据库,管理数据库对象以及处理数据。 </p>
<p>虽然可以通过 Oracle 数据库管理界面执行大多数与数据库有关的任务,但在本教程中,我们介绍如何使用 NetBeans IDE 中的 SQL 编辑器执行其中的一些任务。以下练习介绍了如何创建新用户、如何快速重新创建表,以及如何复制表数据。 </p>
<div class="indent">
<h3><a name="createuser"></a>创建用户</h3>
<p>让我们创建一个新数据库用户帐户以处理数据库中的表和数据。要创建新的用户,您必须使用数据库管理员帐户登录。在本示例中,我们使用在安装数据库期间创建的默认 <tt>system</tt> 帐户。</p>
<ol>
<li>在 "Services"(服务)窗口中,右键单击 "OracleDB" 连接节点,然后选择 "Execute Command"(执行命令)。此时将打开 NetBeans IDE 的 SQL 编辑器,您可以在其中输入将发送到数据库的 SQL 命令。<br> <img alt="在 &quot;Services&quot;(服务)窗口中执行命令菜单项" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/execute.png"></li>
<li>要创建新用户,请在 "SQL Editor"(SQL 编辑器)窗口中输入以下命令,然后单击工具栏上的 "Run SQL"(运行 SQL)按钮。 <br> <img alt="创建用户命令" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/create-user.png"><br>
<pre class="examplecode">create user jim<br>identified by mypassword<br>default tablespace users<br>temporary tablespace temp<br>quota unlimited on users;</pre>
<p>该命令可创建新用户 <tt>jim</tt>,口令为 <tt>mypassword</tt>。默认表空间为 <tt>users</tt>,且分配的空间不受限制。 </p></li>
<li>下一步是为 <tt>jim</tt> 用户帐户授予在数据库中执行操作的权限。我们需要允许该用户连接到数据库,在用户默认表空间中创建和修改表以及访问 <tt>hr</tt> 样例数据库中的 <tt>Employees</tt> 表。
<p class="notes">实际上,数据库管理员可创建定制角色,并微调每个角色的权限。但就本教程而言,我们可以使用预定义的角色,例如 <tt>CONNECT</tt>。有关角色和权限的详细信息,请参见 <a href="http://download.oracle.com/docs/cd/E11882_01/network.112/e16543/toc.htm" target="_blank">Oracle 数据库安全指南</a></p>
<pre class="examplecode">
grant connect to jim;
grant create table to jim;
grant select on hr.departments to jim;</pre>
</li>
</ol>
<div class="feedback-box float-left" style="width: 723px;">
<h3>Oracle 数据库中的表空间 </h3>
<p>表空间是任何 Oracle 数据库的逻辑数据库存储单元。事实上,数据库的所有数据都存储在表空间中。您可以在分配的表空间中创建表。如果未明确为用户指定默认表空间,则默认使用系统表空间(最好避免出现这种情况)。 </p>
<p>有关表空间概念的详细信息,请参见 <a href="http://www.orafaq.com/wiki/Tablespace" target="_blank">Oracle 常见问题解答:表空间</a></p>
</div>
<br style="clear: left">
<h3><a name="createtable"></a>创建表</h3>
<p>可以使用几种方法通过 NetBeans IDE 在数据库中创建表。例如,您可以运行 SQL 文件(右键单击文件并选择 "Run File"(运行文件)),执行 SQL 命令(右键单击连接节点并选择 "Execute Command"(执行命令))或使用 "Create Table"(创建表)对话框(右键单击 "Tables"(表)节点并选择 "Create Table"(创建表))。在本练习中,将使用一个表的结构重新创建另一个表。 </p>
<p>在本示例中,您希望用户 <tt>jim</tt> 通过 <tt>hr</tt> 数据库重新创建 <tt>Departments</tt> 表,以便在其方案中创建该表的副本。在创建该表之前,您需要与服务器断开连接,然后以用户 <tt>jim</tt> 身份登录。</p>
<ol>
<li>在 "Services"(服务)窗口中右键单击 <tt>OracleDB</tt> 连接节点,然后选择 "Disconnect"(断开连接)。</li>
<li>右键单击 <tt>OracleDB</tt> 连接节点,选择 "Connect"(连接),然后以 <tt>jim</tt> 身份登录。</li>
<li>展开 "HR" 方案下面的 "Tables"(表)节点,然后确认用户 <tt>jim</tt> 只能访问 <tt>Departments</tt> 表。
<p>在创建用户 <tt>jim</tt> 后,选择权限仅限于 <tt>Departments</tt> 表。 </p>
<img alt="抓取表的结构" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/hr-view.png"></li>
<li>右键单击 <tt>Departments</tt> 表节点,然后选择 "Grab Structure"(抓取结构)。将 <tt>.grab</tt> 文件保存到磁盘上。</li>
<li>展开 <tt>JIM</tt> 方案,右键单击 <tt>Tables</tt>(表)节点,然后选择 "Recreate Table"(重新创建表)。<br> 指向您创建的 <tt>.grab</tt> 文件。 <br> <img alt="在其他用户的方案中重新创建表" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/recreate.png"></li>
<li>查看用于创建表的 SQL 脚本。单击 "OK"(确定)。<br> <img alt="在其他用户的方案中重新创建表" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/nametable.png"><br> 单击 "OK"(确定)时,将会创建新的 <tt>DEPARTMENTS</tt> 表,并在 <tt>JIM</tt> 方案节点下面显示该表。如果右键单击表节点并选择 "View Data"(查看数据),则会看到该表是空的。 </li>
</ol>
<p>如果要将原始 <tt>Departments</tt> 表中的数据复制到新表,则既可在表编辑器中手动输入数据,也可针对新表运行 SQL 脚本以填充该表。</p>
<p><strong>要手动输入数据,请执行以下步骤。</strong></p>
<ol>
<li>右键单击 <tt>JIM</tt> 方案下方的 <tt>DEPARTMENTS</tt> 表,然后选择 "View Data"(查看数据)。</li>
<li>单击 "View Data"(查看数据)工具栏上的 "Insert Record"(插入记录)图标,以打开 "Insert Record"(插入记录)窗口。 <br> <img alt="&quot;Insert Records&quot;(插入记录)图标" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/insert-rec.png"></li>
<li>在字段中以键入方式输入数据。单击 "OK"(确定)。
<p>例如,可以输入从原始 <tt>DEPARTMENTS</tt> 表中提取的以下值。</p>
<table width="25%" >
<tr>
<th width="50%" class="tblheader" scope="col"></th>
<th width="50%" class="tblheader" scope="col"></th>
</tr>
<tr>
<td class="tbltd1">DEPARTMENT_ID</td>
<td class="tbltd1">10</td>
</tr>
<tr>
<td class="tbltd1">DEPARTMENT_NAME</td>
<td class="tbltd1">Administration</td>
</tr>
<tr>
<td class="tbltd1">MANAGER_ID</td>
<td class="tbltd1">200</td>
</tr>
<tr>
<td class="tbltd1">LOCATION_ID</td>
<td class="tbltd1">1700</td>
</tr>
</table>
</li>
</ol>
<p><strong>要使用 SQL 脚本填充表,请执行以下步骤。</strong></p>
<ol>
<li>右键单击 <tt>JIM</tt> 方案下方的 <tt>DEPARTMENTS</tt> 表,然后选择 "Execute Command"(执行命令)。</li>
<li>在 "SQL Command"(SQL 命令)标签中输入脚本。单击工具栏中的 "Run"(运行)按钮。
<p>以下脚本使用原始表中的数据填充新表的第一行。</p>
<pre class="examplecode">INSERT INTO JIM.DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID) VALUES (10, 'Administration', 200, 1700);</pre>
</li>
</ol>
<p class="tips">您可以通过执行以下步骤,获取使用原始表填充新表的 SQL 脚本。</p>
<ol>
<li>右键单击 <tt>HR</tt> 方案下方的 <tt>DEPARTMENTS</tt> 表,然后选择 "View Data"(查看数据)。</li>
<li>在 "View Data"(查看数据)窗口中选择所有行,在该表中右键单击,然后从弹出式菜单中选择 "Show SQL Script for INSERT"(显示 INSERT 的 SQL 脚本),以打开包含脚本的 "Show SQL"(显示 SQL)对话框。
<p>然后,您可以复制该脚本并根据需要进行修改,在您的表中插入数据。</p>
</li>
</ol>
<p>有关使用 SQL 编辑器的详细信息,请参见<a href="#tips">提示</a></p>
<h3><a name="altertable"></a>使用表数据 </h3>
<p>要使用表数据,可以利用 NetBeans IDE 中的 SQL 编辑器。通过运行 SQL 查询,可以添加、修改和删除数据库结构中保留的数据。 </p>
<p>首先,在 <tt>jim</tt> 方案中创建第二个名为 Locations 的表(仍然使用 jim 的用户帐户登录)。这一次,我们只需要在 IDE 中运行现成的 SQL 文件即可:</p>
<ol>
<li>下载 <a href="https://netbeans.org/project_downloads/samples/Samples/Java/locations.sql" target="_blank">locations.sql</a> 文件并将其保存到计算机上的 <em>USER_HOME</em> 目录中。
</li>
<li>打开 IDE 的 "Favorites"(收藏夹)窗口,然后找到 <tt>locations.sql</tt> 文件。
<p class="tips">要打开 "Favorites"(收藏夹)窗口,请在主菜单中单击 "Window"(窗口)> "Favorites"(收藏夹)(按 Ctrl-3 组合键)。默认情况下,将在 "Favorites"(收藏夹)窗口中列出 <em>USER_HOME</em> 目录。</p>
</li>
<li>右键单击 <tt>locations.sql</tt> 文件,然后选择 "Run File"(运行文件)。<br> <img alt="&quot;Insert Records&quot;(插入记录)图标" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/run-file.png">
<p class="notes"><strong>注:</strong>如果有多个数据库连接注册到 IDE,则 IDE 可能会提示您选择正确的连接。</p></li>
<li>在 "Services"(服务)窗口中,右键单击 "Tables"(表)节点,然后在弹出式菜单中选择 "Refresh"(刷新)。
<p>您可以看到在 <tt>JIM</tt> 方案中添加了包含数据的 <tt>Locations</tt> 表。</p>
<img alt="添加到 jim 方案的第二个表" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/second-table.png"></li>
<li>右键单击 Locations 表节点,然后选择 "View Data"(查看数据)以查看表内容。您将看到 Locations 表的内容。<br> 您可以直接在此视图窗口中插入新记录和修改现有数据。 <br> <img alt="查看 &quot;Locations&quot;(位置)表中的所有数据" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/view-data1.png"></li>
<li>接下来,我们运行一个查询以显示以下两个表中的信息:Departments 和 Locations。
<p>在本示例中,我们使用简单的“自然合并”,因为两个表具有相同的 "location_id" 列,其中保存了相同数据类型的值。这种合并仅选择在匹配 location_id 列中具有相等值的行。</p>
<p>打开 "SQL Command"(SQL 命令)窗口(右键单击 <tt>JIM</tt> 方案下面的 <tt>Tables</tt>(表)节点,然后选择 "Execute Command"(执行命令)),输入以下 SQL 语句,然后单击 "Run SQL"(运行 SQL)图标。</p>
<pre class="examplecode">
SELECT DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID, STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE
FROM departments NATURAL JOIN locations
ORDER by DEPARTMENT_NAME;</pre>
<p>该 SQL 查询返回 Departments 表中的 location_id 值与 Locations 表中的匹配列值相等的行,并按 Department 名称对结果进行排序。请注意,您无法在此查询结果中直接插入新记录,这与单个表的表示形式不同。 </p>
<img alt="联接多个位置的数据" class="margin-around" src="../../../images_www/articles/73/ide/oracle-db/join.png"><br>
<p class="tips">您可以将 SQL 合并查询保存为视图(右键单击 "View"(视图)节点,然后选择 "Create View"(创建视图)),并在以后需要时方便地运行该视图。为此,应为数据库用户授予我们的样例用户所没有的 "Create View"(创建视图)权限。您可以使用 system 帐户登录,为 <tt>jim</tt> 授予 "Create View"(创建视图)权限(使用以下 SQL 语句:"grant create view to jim;"),然后尝试创建自己的视图。 </p>
</li>
<!-- <li>Now we need to add a foreign key.<br>
<br>
ALTER TABLE jim.departments<br>
ADD CONSTRAINT location_fk FOREIGN KEY (location_id)<br>
REFERENCES jim.locations (location_id) enable;</li> -->
</ol>
<div class="feedback-box float-left" style="width: 723px;">
<h3><a name="tips"></a>NetBeans IDE SQL 编辑器使用提示</h3>
<p>如果学习过本教程前面的内容,则您已使用了 NetBeans IDE SQL 编辑器功能。我们在此处列出了几个可能对您有用的其他 NetBeans IDE SQL 编辑器功能。
<ol>
<li><strong>数据库表的 GUI 视图</strong>。在 "Services"(服务)窗口中右键单击表节点并选择 "View Data"(查看数据)时,IDE 将显示该表的可视表示形式及其数据(如上图所示)。您还可以在该视图中直接添加、修改和删除表数据。
<ul>
<li>要添加记录,请单击 "Insert Records"(插入记录)<img alt="&quot;Insert Records&quot;(插入记录)图标" src="../../../images_www/articles/73/ide/oracle-db/row-add.png"> 图标并在打开的 "Insert Records"(插入记录)窗口中插入新数据。单击 "Show SQL"(显示 SQL)按钮以查看该操作的 SQL 代码。该表将使用新记录自动更新。 </li>
<li>要修改记录,请在表的 GUI 视图中的任何单元格内直接双击,然后键入新值。在提交更改之前,将使用绿色显示修改的文本。要提交更改,请单击 "Commit Changes"(提交更改)<img alt="&quot;Commit Changes&quot;(提交更改)图标" height="16" src="../../../images_www/articles/73/ide/oracle-db/row-commit.png" width="16"> 图标。要取消更改,请单击 "Cancel Edits"(取消编辑)<img alt="&quot;Cancel Edits&quot;(取消编辑)图标" height="16" src="../../../images_www/articles/73/ide/oracle-db/row-commit.png" width="16"> 图标。</li>
<li>要删除行,请选择该行并单击 "Delete Selected Records"(删除选定的记录)<img alt="&quot;Delete Selected Records&quot;(删除选定的记录)图标" height="16" src="../../../images_www/articles/73/ide/oracle-db/row-commit.png" width="16"> 图标。 </li>
</ul>
<li><strong>保留先前的标签</strong>。在 SQL 编辑器工具栏上单击 "Keep Prior Tabs"(保留先前的标签)<img alt="&quot;Keep Prior Tabs&quot;(保留先前的标签)图标" height="16" src="../../../images_www/articles/73/ide/oracle-db/keepoldresulttabs.png" width="16"> 图标以保留打开以前查询结果的窗口。如果要比较多个查询的结果,这可能很有用。 </li>
<li><strong>SQL 历史记录</strong>(Ctrl-Alt-Shift-H 组合键)。使用 SQL 编辑器工具栏上的 "SQL History"(SQL 历史记录)<img alt="&quot;SQL History&quot;(SQL 历史记录)图标" height="16" src="../../../images_www/articles/73/ide/oracle-db/sql-history.png" width="16"> 图标可查看已为每个数据库连接运行的所有 SQL 语句。从下拉列表中选择该连接,查找所需的 SQL 语句,然后单击 "Insert"(插入)将该语句放在 "SQL Command"(SQL 命令)窗口中。 </li>
<li><strong>连接列表</strong>。如果有多个数据库连接,并需要在 SQL 编辑器中快速切换这几个连接,请使用 "Connections"(连接)下拉列表。 </li>
<li><strong>运行 SQL 语句</strong>。要运行当前 "SQL Command"(SQL 命令)窗口中的完整语句,请单击 "Run SQL"(运行 SQL)<img alt="&quot;Run SQL&quot;(运行 SQL)图标" height="16" src="../../../images_www/articles/73/ide/oracle-db/runsql.png" width="16"> 图标。如果您希望只运行 SQL 语句的一部分,请在 "SQL Command"(SQL 命令)窗口中将其选中,右键单击所选内容,然后选择 "Run Selection"(运行选择)。在这种情况下,仅执行所选的部分。 </li>
</ol>
</div>
</div>
<br style="clear: left">
<h2><a name="oci8" /></a>OCI 8 PHP 扩展和适用于 PHP 的 NetBeans IDE </h2>
<p>您可以使用 OCI 8 PHP 扩展和适用于 PHP 的 NetBeans IDE 编写 PHP 代码,以便与 Oracle 数据库通信。使用适用于 PHP 的 NetBeans IDE 和 Oracle 数据库:</p>
<ol>
<li>按照 <a href="../../trails/php.html">PHP 学习资源</a>的“配置 PHP 开发环境”部分所述,设置 PHP 环境。请注意,NetBeans IDE 仅支持 PHP 5.2 或 5.3。</li>
<li>在编辑器中打开 <tt>php.ini</tt> 文件。确保将 <tt>extension_dir</tt> 属性设置为 PHP 扩展目录。此目录通常为 <tt>PHP_HOME/ext</tt>。例如,在将 PHP 5.2.9 安装到 <tt>C:</tt> 根目录时,<tt>extension_dir</tt> 设置应为 <tt>extension_dir="C:\php-5.2.9\ext"</tt></li>
<li>找到 <tt>extension=php_oci8_11g.dll</tt>(适用于 Oracle 11g)或 <tt>extension=php_oci8.dll</tt>(适用于 Oracle 10.2 或 XE)行并取消注释。每次只能启用其中的一个扩展。
<p class="alert"><strong>重要说明:</strong>如果 <tt>php.ini</tt> 中没有这些行,请在 extensions 文件夹中查找 OCI 8 扩展文件。如果 extensions 文件夹中没有 OCI 8 扩展文件,请参见<a href="http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html" target="_blank">在 Linux 和 Windows 中安装 PHP 和 Oracle Instant Client</a> 以了解 OCI 8 的下载和安装信息。
<li>重新启动 Apache。(Windows 用户应重新启动计算机。) </li>
<li>运行 <tt>phpinfo()</tt>。如果成功启用了 OCI 8,则会在 <tt>phpinfo()</tt> 输出中显示 OCI 8 部分。</li>
</ol>
<p>有关启用 OCI 8 的详细信息(尤其是将 OCI 8 与远程 Oracle DB 服务器一起使用的信息),请参见<a href="http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html" target="_blank">在 Linux 和 Windows 中安装 PHP 和 Oracle Instant Client</a></p>
<p>如果启用了 OCI 8,适用于 PHP 的 NetBeans IDE 将访问该扩展以完成代码并进行调试。</p>
<p><img alt="带有 OCI 8 代码完成选项的编辑器窗口" border="1" class="margin-around" height="130" src="../../../images_www/articles/73/ide/oracle-db/oci-cc.png" width="401"></p>
<h2><a name="oci"></a>将 OCI JDBC 驱动程序与 NetBeans IDE 一起使用</h2>
<p>OCI 驱动程序包是在与 JDBC Thin 驱动程序 (<tt>ojdbc6.jar</tt>) 相同的 JAR 文件中提供的。选择使用哪个驱动程序取决于以下接口:<tt>oracle.jdbc.OracleDriver</tt> 用于 Thin 驱动程序;<tt>oracle.jdbc.driver.OracleDriver</tt> 用于 OCI 驱动程序。要使用 OCI 驱动程序,还必须安装 Oracle Database Instant Client,因为它包含 OCI 驱动程序与数据库进行通信所需的所有库。 </p>
<p><strong>从 NetBeans IDE 中使用 Oracle OCI 驱动程序连接到 Oracle 数据库:</strong> </p>
<ol>
<li><a href="http://www.oracle.com/technetwork/database/features/instant-client/index-100365.html" target="_blank">下载</a>适用于您的平台的基本 Oracle Database Instant Client 软件包。按照<a href="http://www.oracle.com/technetwork/database/features/instant-client/index-100365.html" target="_blank">此页</a>上的安装说明进行操作。 </li>
<li>在 IDE 的 "Services"(服务)窗口中,右键单击 "Databases"(数据库)节点,然后选择 "New Connection"(新建连接)。</li>
<li>在 "Locate Driver"(查找驱动程序)步骤中,选择 "Oracle OCI",然后单击 "Add"(添加)并指定 <tt>ojdbc6.jar</tt> 文件。 </li>
<li>在 "Customize Connection"(定制连接)对话框中,提供以下连接详细信息:IP 地址、端口、SID、用户名和口令。<br> 请注意 OCI 和 Thin 驱动程序的 JDBC URL 的差别。 <br> <img alt="带有 OCI 8 代码完成选项的编辑器窗口" border="1" class="margin-around" height="467" src="../../../images_www/articles/73/ide/oracle-db/oci-connection.png" width="358"><br>
</li>
</ol>
<h2><a id="troubleshoot" name="troubleshoot"></a>疑难解答</h2>
<p>下面的疑难解答提示仅介绍了我们遇到的几种异常错误。如果此处没有解答您的问题,请自行搜索或使用“发送有关此教程的反馈意见”链接提供建设性反馈。 </p>
<ul>
<li>
您将会看到类似下面的错误:<br>
<pre class="examplecode" style="width: 700px">Shutting down v3 due to startup exception : No free port within range:
>> 8080=com.sun.enterprise.v3.services.impl.monitor.MonitorableSelectorHandler@7dedad</pre>
出现这种错误的原因是,GlassFish 应用服务器和 Oracle 数据库均使用端口 8080。如果要同时使用这两个应用程序,您需要更改其中的一个应用程序的默认端口。要重置 Oracle 数据库的默认端口,您可以使用以下命令:
<pre>CONNECT SYSTEM/password<br>EXEC DBMS_XDB.SETHTTPPORT(&lt;new port number&gt;);</pre>
</li>
<li>出现以下错误:<br>
<pre class="examplecode" style="width: 700px">Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor.</pre>
如果监听程序无法识别连接描述符提供的数据库实例的服务 ID (SID),则会出现这种错误。出现该异常错误有几个原因。例如,如果未启动 Oracle 数据库,则可能会出现该异常(最简单的情况)。SID 不正确或监听程序无法识别 SID。如果使用默认 SID(例如,Oracle Database Express Edition 的默认 SID 为 XE),则不太可能会出现该问题。SID 包含在 <tt>tnsnames.ora</tt> 文件的 CONNECT DATA 部分(在 Windows 计算机上,该文件位于 <tt>%ORACLE_HOME%\network\admin\tnsnames.ora</tt>)。 </li>
<li>出现以下错误: <br>
<pre class="examplecode" style="width: 700px">ORA-12705: Cannot access NLS data files or invalid environment specified.</pre>
</li>
</ul>
<p>通常,这表示 NLS_LANG 环境变量包含无效的语言、国家/地区或字符集值。如果属于这种情况,则应在操作系统级别禁用无效的 NLS_LANG 设置。对于 Windows,请在 Windows 注册表的 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 中重命名 NLS_LANG 子键。对于 Linux/Unix,请运行 "unset NLS_LANG" 命令。</p>
<div class="feedback-box">
<a href="/about/contact_form.html?to=3&subject=Feedback:%20Connecting%20to%20Oracle%20Database%20from%20NetBeans%20IDE">请将您的反馈意见发送给我们</a></div>
<br style="clear:both;">
<a name="seeAlso"></a>
<h2>另请参见</h2>
<p>有关管理和使用 Oracle 数据库的更多信息,请参见相应的 Oracle 文档。我们在下面简要列出了最常用的文档。 </p>
<ul>
<li><a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/toc.htm" target="_blank">Oracle 数据库 SQL 参考</a>。完整介绍用于处理 Oracle 数据库中信息的 SQL 语句。 </li>
<li><a href="http://download.oracle.com/docs/cd/E11882_01/network.112/e16543/toc.htm" target="_blank">Oracle 数据库安全指南</a>。提供并解释在管理 Oracle 数据库时使用的主要概念。 </li>
<li><a href="http://st-curriculum.oracle.com/tutorial/DBXETutorial/index.htm" target="_blank">Oracle Database 10<em>g</em> Express Edition 教程</a>。快速而详细地介绍了如何使用 Oracle Database XE。 </li>
<li><a href="http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html">在 Linux 和 Windows 中安装 PHP 和 Oracle Instant Client</a>。有关安装 PHP 和 Oracle Instant Client 的直观操作方法文章。 </li>
</ul>
<p>有关如何在 NetBeans IDE 中使用其他数据库的信息,请参见</p>
<ul>
<li><a href="java-db.html">使用 Java DB (Derby) 数据库</a> </li>
<li><a href="mysql.html">连接 MySQL 数据库</a></li>
<li><a href="../web/mysql-webapp.html">使用 MySQL 数据库创建简单的 Web 应用程序</a></li>
</ul>
</body>
</html>