insert into tianen values(2,"计算机公司",′1977年6月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室(SoftwareDevelopment Laboratories,SDL)的计算机公司(Oracle公司的前身)。那个时候,32岁的Larry Ellison,这个读了三家大学都没能毕业的辍学学生,还只是一个普通的软件工程师。公司创立之初,Miner是总裁,Oates为副总裁,而Ellison,因为一个合同的事情,还在另一家公司上班。");
insert into tianen values(3,′Bruce Scott","没多久,第一位员工Bruce Scott(用过Oracle数据库软件的人都知道有个Scott用户的吧?没错,就是这个Scott,至于Scott用户的密码Tiger,那是Scott养的猫的名字)加盟进来,在Miner和Oates有些厌倦了那种合同式的开发工作后,他们决定开发通用软件,不过他们还不知道自己能开发出来什么样的产品。");
insert into test values(4,"Ellison和Miner预见",′在Miner和Oates有些厌倦了那种合同式的开发工作后,他们决定开发通用软件,不过他们还不知道自己能开发出来什么样的产品。Oates最先看到了埃德加·考特的那篇着名的论文连同其他几篇相关的文章并推荐Ellison和Miner也阅读一下。Ellison和Miner预见到数据库软件的巨大潜力,于是,SDL开始策划构建可商用的关系型数据库管理系统(RDBMS)。");
insert into tianen values(5,"关系软件有限公司","Oracle(字典里的解释有“神谕,预言”之意)是一切智慧的源泉。1979年,SDL更名为关系软件有限公司(Relational Software,Inc.,RSI)");
insert into tianen values(6,"美国中央情报局",′虽然软件不是很好,但客户还是有的。美国中央情报局迫不及待地想买一套这样的软件来满足他们的需求。但在咨询了IBM公司之后发现IBM没有可以商用的产品,他们联系了RSI。于是RSI有了第一个客户。");
commit;
然后,启动Enterprise ManagerConsole,选择“独立启动”。
在弹出的“数据库连接信息”对话框中输入用户信息进行登录。
在Oracle Enterprise MangnerConsole中,在“方案”节点的子节点“索引”处单击右键,从弹出的快捷菜单中选择“创建”。
弹出“创建索引”对话框,在其中填入“索引名称”等相关信息。单击“创建”按钮,即可完成索引的创建。
系统将会弹出“创建索引成功”的对话框。
在索引名称列表中单击任何一个索引,通过右键菜单可以管理其全部内容。例如,右键单击“TIANEN ISET”,在弹出的快捷菜单中选择“查看编辑详细资料”。打开“编辑索引”对话框。
5.2.5CTXCAT索引
由于Internet商务的出现及其对高性能的要求,对一个表中多个列创建组合索引已十分普遍,此时所有列通常都出现在一个查询中。例如,Internet拍卖站点的用户可能希望查看在特定日期(比如今天)结束的拍卖活动中,某一类别(比如Pokemon项)的所有出价。将出价金额、类别和结束日期列组合在一起的索引,可使此查询得到最佳处理。例如,可创建包含这些列的索引集,索引集可用于创建CTXCAT类型的Oracle Text索引,此索引可用于查询。
可以使用CTXCAT类型(发行版9i新增的)的Oracle Text索引来将文本列和一个或多个其他列编入索引。(在发行版9i之前,唯一的Oracle Text索引类型是CONTEXT,它只将文本列编入索引。)要创建CTXCAT索引,必须先创建索引集,并基于索引集创建CTXCAT索引。本书不做具体介绍,详情请参看Oracle产品文档。
5.3Oracle全文搜索的应用
Oracle一直致力于全文检索技术的研究,当Oracle9i Rlease2发布之时,Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。
现在,有了前面学习的关于Oracle全文检索的知识,我们可以做两个简单的应用。下面这两个例子使用前面建立的test数据表,一个是桌面应用,一个是Web应用。使用的技术分别为:Oracle9i+Java Swing,Oracle9i+JSP2.4。
5.3.1Oracle全文检索桌面应用
本应用允许用户输入关键词,然后单击“搜索”按钮,执行全文搜索,显示搜索结果。
案例名称:Oracle全文检索桌面应用
程序名称TianenSearcher.java
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class TianenSearcher
{
//搜索关键词
static JTextField jtf=null;
//搜索按钮
static JButton jb=null;
//文本区域
static JTextArea jta;
private static void createAndShowGUI()
{
…JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame=new JFrame("Searcher!yutianen@163.com");
frame.setDefaultCloseOperation(JFrame.EXIT ONCLOSE);
Container con=frame.getContentPane();
con.setLayout(newBorderLayout());
JPanel jpup=new JPanel();
jpup.setLayout(new GridLayout(1,2));
jtf=new JTextField(30);
jb=new JButton("搜索");
jb.addActionListener
(
newActionListener()
{
public void actionPerformed(ActionEvent e)
{
String s=jtf.getText().trim();
jta.setText(search(s));
}
}
);
jpup.add(jtf);
jpup.add(jb);
jta=new JTextArea(10,60);
jta.setLineWrap(true);
JScrollPane jsp=new JScrollPane(jta);
con.add(jpup,BorderLayout.NORTH);
con.add(jsp,BorderLayout.CENTER);
frame.setSize(200,100);
frame.pack();
frame.setVisible(true);
}public static void main(String[] args)
{
SwingUtilities.invokeLater
(
new Runnable()
{
public void run()
{
createAndShowGUI();
}
}
);
}
private static String search(String s)
{
…Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
StringBuffer res=new StringBuffer("");
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException ce)
{
System.out.println(ce.getMessage());
}
try
{
//获得Connection对象
String url="jdbc:oracle:thin:@ localhost:1521:yuanyuan";
conn=DriverManager.getConnection(url,"scott","tiger");
stmt=conn.createStatement();
String sql="select*from test where contains(body,′"+s+"")>0";
rs=stmt.executeQuery(sql);
while(rs.next())
{
res.append(rs.getString("title")+"
"+rs.getString("body")+"
————");
}
}
catch(SQLException e)
{
System.out.println(e.getMessage());
}
finally
{
if(rs!=null)
{
try
{
rs.close();
}
catch(SQLException ee)
{
System.out.println(ee.getMessage());
}
}
if(stmt!=null)
{
try
{
stmt.close();
}
catch(SQLException ee)
{
System.out.println(ee.getMessage());
}
}
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException ee)
{
System.out.println(ee.getMessage());
}
}
}
return res.toString();
}
}
5.3.2Oracle全文检索Web应用
本应用的实现原理与桌面应用相同,具体程序代码如下所示。
案例名称:Oracle全文检索Web应用
程序名称:test.jsp
<%@ page contentType="text/html;charset=gbk"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException e)
{
out.print(e.getMessage());
}
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try
{
…String url="jdbc:oracle:thin:@ localhost:1521:yuanyuan";
String user="scott";
String password="tiger";
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
String sql="select*from test where contains(body,""scott"or"oracle"")>0";
rs=stmt.executeQuery(sql);
while(rs.next())
{
String a=rs.getString("id");
String b=rs.getString("title");
String c=rs.getString("body");
out.print(a+"<br>"+b+"<br>"+c+"<hr>");
}
}
catch(SQLException ee)
{
out.print(ee.getMessage());
}
finally
{
if(rs!=null)
{
try
{
rs.close();
}
catch(SQLException ex)
{
out.print(ex.getMessage());
}
}
if(stmt!=null)
{
try
{
stmt.close();
}
catch(SQLException ex)
{
out.print(ex.getMessage());
}
}
if(conn!=null)
{
try
{
conn.close();
}