注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

Oracle数据库全文搜示例  

2008-10-24 19:41:39|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
关键点,采用Contains函数
SELECT id,body FROM myclob WHERE CONTAINS(body, '中国') > 0;
SELECT id || substr(body,0,7) FROM myclob WHERE CONTAINS(body, '中国') > 0;
/* test select */
select id,title from test where contains(body,'神谕')>0;
select id,title from test where contains(body,'"埃及法老"')>0;
select id,title from test where contains(body,'"RSI" and "oracle"')>0;
select id,title from test where contains(body,'"SCOTT" or "oracle"')>0;
select id,title from test where contains(body,'"智慧"')>0;
SELECT id FROM test  WHERE INSTR (body, '智慧') > 0;
SELECT id FROM test  WHERE body like'%智慧%';
select id,title from test where contains(body,'"是一切智慧的源泉"')>0;
select id,title from test where contains(body,'fuzzy("oracla")')>0;
SELECT SCORE(1) id from test WHERE CONTAINS(body, 'oracle', 1) > 0;
SELECT SCORE(1) id from test WHERE CONTAINS(body, 'about(oracle)', 1) > 0;
/*blob*/
select * from test where contains(body,' " + s + " ')>0
------------------------------------------------------------------------------------------------------------------------
示例代码
create table myblob
(
  id number,
  fname varchar2(50),
  fblob blob
);

CREATE INDEX IDX_myblob ON myblob(fblob) INDEXTYPE IS CTXSYS.CONTEXT;

select id,fname from myblob where contains(fblob,'大禹')>0;

--drop table myblob

java代码
package search.oracleSearch;
import java.sql.*;
import javax.swing.*;
public class BlobShow
{
    public static void main(String[] args)
    {
       
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
        Blob blob=null;
       
        try
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        }
        catch(ClassNotFoundException ea)
        {
            ea.printStackTrace();
        }
       
        try
        {
            String url="jdbc:oracle:thin:@172.16.1.112:1521:orcl";
            conn=DriverManager.getConnection(url,"dev","dev");
           
            conn.setAutoCommit(false);
           
            st=conn.createStatement();
            rs=st.executeQuery("select * from myblob where id=1");
            if(rs.next())
            {
                blob=rs.getBlob("fblob");   
                ImageIcon icon=new ImageIcon(blob.getBytes(1,(int)blob.length()));
                JLabel l=new JLabel(icon);
                JFrame jf=new JFrame("mywife");
                jf.getContentPane().add(l);
                jf.pack();
                jf.setVisible(true);
            }
        }
        catch(SQLException se)
        {
            se.printStackTrace();
        }
        finally
        {
            //---finally--start
            if(rs!=null)
            {
                try
                {
                    rs.close();
                }
                catch(SQLException e)
                {
                    e.printStackTrace();
                }
            }
            //////////////////////////////
            if(st!=null)
            {
                try
                {
                    st.close();
                }
                catch(SQLException e)
                {
                    e.printStackTrace();
                }
            }
            /////////////////////////////
            if(conn!=null)
            {
                try
                {
                    conn.close();
                }
                catch(SQLException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
}

代码2

package search.oracleSearch;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;


public class BinSearcher
{
    //搜索关键词
    static JTextField jtf=null;
    //搜索按钮
    static JButton jb=null;
    //文本区域
    static JTextArea jta;
       
    private static void createAndShowGUI()
    {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame=new JFrame("Binary Searcher! yutianen@163.com");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        Container con= frame.getContentPane();   
        con.setLayout(new BorderLayout());
       
        JPanel jpup=new JPanel();
        jpup.setLayout(new GridLayout(1,2));
        jtf=new JTextField(30);
        jb=new JButton("搜索");
        jb.addActionListener
        (
            new ActionListener()
            {
                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:@172.16.1.202:1521:orcl";
            conn=DriverManager.getConnection(url,"dev","dev");
       
            stmt=conn.createStatement();
            String sql="select * from myblob where contains(fblob,' " + s + " ')>0";
            rs=stmt.executeQuery(sql);
            while(rs.next())
            {       
                res.append(rs.getString("id") + "\n" + rs.getString("fname")+"\n--------------");
            }
        }
        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();
    }
}
代码3
package search.oracleSearch;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;

import oracle.jdbc.OracleResultSet;  // 使用Oracle的ResultSet对象
import oracle.sql.BLOB;  // 使用Oracle的BLOB对象,而不是sun的Blob


public class OracleInput
{
    public static void main(String[] args)
    {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
       
        try
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");   
        }
        catch(ClassNotFoundException ce)
        {
            System.out.println(ce.getMessage());
        }
       
        try
        {
            //获得Connection对象
            String url="jdbc:oracle:thin:@172.16.0.202:1521:orcl";
            conn=DriverManager.getConnection(url,"yiqifadev","yiqifadev");
       
            File file=new File("E:\\VSS\\eqifa3.0\\03)文档\\文档模板\\项目启动文档模板.doc");
            conn.setAutoCommit(false);  // 取消Connection对象的auto commit属性
              String fname=file.getName();
             
            // 使用EMPTY_BLOB()成生一个空blob
            int id=1;
            String sql="INSERT INTO myblob (id,fname,fblob) VALUES (" + id + ",'" + fname + "',EMPTY_BLOB())";
            stmt=conn.createStatement();
              int count=stmt.executeUpdate(sql);

            sql="SELECT fblob FROM myblob WHERE id=" + id +" FOR UPDATE";  // 使用FOR UPDATE得到表的写锁
            rs=stmt.executeQuery(sql);
            rs.next();
            BLOB blob=((OracleResultSet)rs).getBLOB("fblob");  // 得到BLOB对象
            OutputStream out=blob.getBinaryOutputStream();  // 建立输出流
            InputStream in=new FileInputStream(file);  // 建立输入流
            int size=blob.getBufferSize();
            byte[] buffer=new byte[size];  // 建立缓冲区
            int len;
            while((len=in.read(buffer)) != -1)
            {
                out.write(buffer,0,len);
            }
            in.close();
            out.close();
            conn.commit();
            System.out.print("二进制数据写入成功!");
        }
        catch(Exception 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());
                }
            }
        }
    }
}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
数据库
/* create table  */
create table test
(
    id number,
    title varchar2(30),
    body varchar2(1000)
);

/* insert data */
insert into test values(1,'关系型数据库管理软件','虽然早在1970年就诞生了关系模型理论,但是市场上迟迟不见关系型数据库管理软件的推出。主要原因是很多反对者认为关系型数据库速度太慢,比不上当时的层次式数据库。而IBM虽然1973年就启动了System R的项目来研究关系型数据库的实际可行性,却也没有及时推出这样的产品,因为当时IBM的的IMS(著名的层次型数据库)市场不错,如果推出关系型数据库,牵涉到IBM很多人的自身利益。');
insert into test values(2,'计算机公司','1977年6月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室(Software Development Laboratories,SDL)的计算机公司(Oracle公司的前身)。那个时候,32岁的Larry Ellison,这个读了三家大学都没能毕业的辍学学生,还只是一个普通的软件工程师。公司创立之初,Miner是总裁,Oates为副总裁,而 Ellison,因为一个合同的事情,还在另一家公司上班。');
insert into test values(3,'Bruce Scott','没多久,第一位员工Bruce Scott(用过Oracle数据库软件的人都知道有个Scott用户的吧?没错,就是这个Scott,至于Scott用户的密码Tiger,那是 Scott养的猫的名字)加盟进来,在Miner和Oates有些厌倦了那种合同式的开发工作后,他们决定开发通用软件,不过他们还不知道自己能开发出来什么样的产品。');
insert into test values(4,'Ellison和 Miner预见','在Miner和Oates有些厌倦了那种合同式的开发工作后,他们决定开发通用软件,不过他们还不知道自己能开发出来什么样的产品。Oates最先看到了埃德加o考特的那篇著名的论文连同其他几篇相关的文章并推荐Ellison和Miner也阅读一下。Ellison和 Miner预见到数据库软件的巨大潜力,于是,SDL开始策划构建可商用的关系型数据库管理系统(RDBMS)。');
insert into test values(5,'关系软件有限公司','Oracle(字典里的解释有"神谕, 预言"之意)是一切智慧的源泉。1979年,SDL更名为关系软件有限公司(Relational Software,Inc.,RSI)');
insert into test values(6,'美国中央情报局','虽然软件不是很好,但客户还是有的。美国中央情报局迫不及待地想买一套这样的软件来满足他们的需求。但在咨询了IBM公司之后发现 IBM没有可以商用的产品,他们联系了RSI。于是RSI有了第一个客户。');

/* create index */
create index test_ctx_idx
on test (body)
indextype is ctxsys.context;
commit;

/* test select */
select id,title from test where contains(body,'神谕')>0;
select id,title from test where contains(body,'"埃及法老"')>0;
select id,title from test where contains(body,'"RSI" and "oracle"')>0;
select id,title from test where contains(body,'"SCOTT" or "oracle"')>0;
select id,title from test where contains(body,'"智慧"')>0;
SELECT id FROM test  WHERE INSTR (body, '智慧') > 0;
SELECT id FROM test  WHERE body like'%智慧%';
select id,title from test where contains(body,'"是一切智慧的源泉"')>0;
select id,title from test where contains(body,'fuzzy("oracla")')>0;
SELECT SCORE(1) id from test WHERE CONTAINS(body, 'oracle', 1) > 0;
SELECT SCORE(1) id from test WHERE CONTAINS(body, 'about(oracle)', 1) > 0;

java代码
package search.oracleSearch;
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_ON_CLOSE);
       
        Container con= frame.getContentPane();   
        con.setLayout(new BorderLayout());
       
        JPanel jpup=new JPanel();
        jpup.setLayout(new GridLayout(1,2));
        jtf=new JTextField(30);
        jb=new JButton("搜索");
        jb.addActionListener
        (
            new ActionListener()
            {
                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:@172.16.0.202:1521:orcl";
            conn=DriverManager.getConnection(url,"yiqifadev","yiqifadev");
       
            stmt=conn.createStatement();
            String sql="select * from test where contains(body,' " + s + " ')>0";
            System.out.println("sql"+sql);
            rs=stmt.executeQuery(sql);
            System.out.println("step2");
            while(rs.next())
            {       
                res.append(rs.getString("title") + "\n" + rs.getString("body")+"\n--------------\n");
            }
            System.out.println("step3 result:"+res.toString());
        }
        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();
    }
}
///////////////////////////////////////////////////----------------------------------------------------------------------------/////////////
CREATE TABLE myclob
(
      ID        NUMBER PRIMARY KEY,
      body      CLOB
);
commit;

INSERT INTO myclob VALUES(1, EMPTY_CLOB());
INSERT INTO myclob VALUES(2, EMPTY_CLOB());
commit;

DECLARE
   v_lobloc   CLOB;
   v_text     VARCHAR2(500) := '我爱你!中国!古老伟大的祖国!';
   v_amount   INT;
   v_offset   INT;
BEGIN
   SELECT body INTO v_lobloc FROM myclob WHERE id = 1 FOR UPDATE;
   v_offset := DBMS_LOB.GETLENGTH(v_lobloc) + 1;
   v_amount := LENGTH(v_text);
   DBMS_LOB.WRITE(v_lobloc, v_amount, v_offset, v_text);
   COMMIT;
END;

CREATE INDEX IDX_myclob ON myclob(body) INDEXTYPE IS CTXSYS.CONTEXT;
commit;

SELECT id,body FROM myclob WHERE CONTAINS(body, '中国') > 0;

SELECT id || substr(body,0,7) FROM myclob WHERE CONTAINS(body, '中国') > 0;
  评论这张
 
阅读(1016)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016