`

oracle存入图片和文本

阅读更多

转贴

java操作Oracle数据库中的Clob,Blob字段

Java代码 复制代码
  1. 说明1:首先所有的文件都是以二进制存储   
  2.        2:二进制文件有.doc .xls .jpg   
  3.          文本文件有   .txt .html .xml   
  4.   
  5. 先在oracle数据库中建一张表用与测试   
  6.   
  7. create table CDL_TEST   
  8. (   
  9.   SID  VARCHAR2(20) not null,   
  10.   IMG  BLOB,       //存储二进制   
  11.   DOC  CLOB,     //存储文本   
  12.   DATA NUMBER   
  13. )   
  14. -- 约束   
  15.   
  16. alter table CDL_TEST   
  17.   add constraint CDL_SID primary key (SID)   
  18.   
  19.   
  20. 测试代码如下:   
  21.   
  22. package DataBaseUtil;   
  23. import java.sql.*;   
  24. import java.util.Scanner;   
  25. import java.io.*;   
  26. import oracle.sql.BLOB;   
  27.   
  28. class InitDB{   
  29.  private static Connection con=null;   
  30.  private static Statement stmt=null;   
  31.  private static ResultSet rs=null;   
  32.  InitDB(){   
  33.   try{   
  34.   Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();     
  35.       String url="jdbc:oracle:thin:@localhost:1521:ORCL";  //ORCL 是sid   
  36.   String user="cdl";     
  37.   String password="1";     
  38.   con= (Connection) DriverManager.getConnection(url,user,password);   
  39.   InitDB.setCon(con);   
  40.   }catch(Exception e){   
  41.    e.printStackTrace();   
  42.   }   
  43.  }   
  44.     
  45.  public void closCon(){   
  46.   try{   
  47.    con.close();   
  48.   }catch(Exception e){   
  49.    e.printStackTrace();   
  50.   }   
  51.  }   
  52.  public void stmt(){   
  53.   try{   
  54.    con.close();   
  55.   }catch(Exception e){   
  56.    e.printStackTrace();   
  57.   }   
  58.  }   
  59.  public void rs(){   
  60.   try{   
  61.    con.close();   
  62.   }catch(Exception e){   
  63.    e.printStackTrace();   
  64.   }   
  65.  }   
  66.   
  67.  public static Connection getCon() {   
  68.   return con;   
  69.  }   
  70.   
  71.  public static void setCon(Connection con) {   
  72.   InitDB.con = con;   
  73.  }   
  74.   
  75.  public static ResultSet getRs() {   
  76.   return rs;   
  77.  }   
  78.   
  79.  public static void setRs(ResultSet rs) {   
  80.   InitDB.rs = rs;   
  81.  }   
  82.   
  83.  public static Statement getStmt() {   
  84.   return stmt;   
  85.  }   
  86.   
  87.  public static void setStmt(Statement stmt) {   
  88.   InitDB.stmt = stmt;   
  89.  }   
  90. }   
  91.   
  92. /*  
  93.  * 插入Blob数据 如:图片  
  94.  */  
  95. class InsertBlobData{   
  96.  private ResultSet rs=null;   
  97.  private InitDB idb=null;   
  98.  InsertBlobData(){   
  99.    idb=new InitDB();   
  100.  }   
  101.  public  void insertBlob(String sql1) throws SQLException{   
  102.   Connection con=idb.getCon();   
  103.   try{   
  104.    con.setAutoCommit(false);//不设置自动提交   
  105.    BLOB blob = null//插入空的Blob   
  106.    PreparedStatement pstmt = con.prepareStatement("insert into cdl_test(sid,img) values(?,empty_blob())");   
  107.    pstmt.setString(1,"100");    
  108.    pstmt.executeUpdate();    
  109.    pstmt.close();    
  110.    rs=con.createStatement().executeQuery(sql1);   
  111.    while(rs.next()){   
  112.      System.out.println("rs length is:");   
  113.      oracle.sql.BLOB  b=(oracle.sql.BLOB )rs.getBlob("img");   
  114.      System.out.println("cloblength is:"+b.getLength());   
  115.      File f=new File("d:\\img\\1.jpg");   
  116.      System.out.println("file path is:"+f.getAbsolutePath());   
  117.      BufferedInputStream in=new BufferedInputStream(new FileInputStream(f));     
  118.      BufferedOutputStream  out=new BufferedOutputStream(b.getBinaryOutputStream());    
  119.      int   c;      
  120.      while ((c=in.read())!=-1)   {      
  121.       out.write(c);      
  122.      }      
  123.      in.close();      
  124.      out.close();   
  125.    }   
  126.    con.commit();   
  127.   }catch(Exception e){   
  128.    con.rollback();//出错回滚   
  129.    e.printStackTrace();   
  130.   }    
  131.  }   
  132. }   
  133. /*  
  134.  * 插入大文本如:1.txt  
  135.  */  
  136. class InsertClobData{   
  137.  private ResultSet rs=null;   
  138.  private InitDB idb=null;   
  139.  InsertClobData(){   
  140.    idb=new InitDB();   
  141.  }   
  142.  public  void insertClob(String sql1) throws SQLException{   
  143.   Connection con=idb.getCon();   
  144.   try{   
  145.    con.setAutoCommit(false);//不设置自动提交   
  146.    BLOB blob = null//插入空的Clob   
  147.    PreparedStatement pstmt = con.prepareStatement("insert into cdl_test(sid,doc) values(?,empty_clob())");   
  148.    pstmt.setString(1,"101");    
  149.    pstmt.executeUpdate();    
  150.    pstmt.close();    
  151.    rs=con.createStatement().executeQuery(sql1);   
  152.    while(rs.next()){   
  153.     System.out.println("sdfasdfas");   
  154.     oracle.sql.CLOB  cb=(oracle.sql.CLOB)rs.getClob("doc");   
  155.     File f=new File("d:\\doc\\1.txt");   
  156.     System.out.println("file path is:"+f.getAbsolutePath());   
  157.     BufferedWriter out = new BufferedWriter(cb.getCharacterOutputStream());   
  158.     BufferedReader in = new BufferedReader(new FileReader(f));   
  159.     int c;   
  160.     while ((c=in.read())!=-1) {   
  161.         out.write(c);   
  162.     }   
  163.     in.close();      
  164.     out.close();   
  165.    }   
  166.    con.commit();   
  167.   }catch(Exception e){   
  168.    con.rollback();//出错回滚   
  169.    e.printStackTrace();   
  170.   }    
  171.  }   
  172. }   
  173. /*  
  174.  * 读取图片  
  175.  */  
  176. class ReadBlobData{   
  177.  private ResultSet rs=null;   
  178.  private InitDB idb=null;   
  179.  ReadBlobData(){   
  180.    idb=new InitDB();   
  181.  }   
  182.  public void getBlob(String sql2) throws SQLException{   
  183.   Connection con=idb.getCon();   
  184.   con.setAutoCommit(false);   
  185.   try{   
  186.    System.out.println("sq2 is:"+sql2);   
  187.    System.out.println("stmt is:"+con);   
  188.    rs=con.createStatement().executeQuery(sql2);   
  189.    while(rs.next()){   
  190.     System.out.println("rs length is:");   
  191.     Blob b=(Blob)rs.getBlob("img");   
  192.     File f=new File("D:\\saveimg\\1.jpg");   
  193.     FileOutputStream fos=new FileOutputStream(f);   
  194.     InputStream is=b.getBinaryStream();//读出数据后转换为二进制流   
  195.     byte[] data=new byte[1024];   
  196.     while(is.read(data)!=-1){   
  197.      fos.write(data);   
  198.     }   
  199.     fos.close();   
  200.     is.close();   
  201.    }   
  202.   con.commit();//正式提交   
  203.   }catch(Exception e){   
  204.    e.printStackTrace();   
  205.   }finally{   
  206.    //rs.close();   
  207.   }   
  208.  }   
  209. }   
  210. /*  
  211.  * 读取大文本  
  212.  */  
  213. class ReadClobData{   
  214.  private ResultSet rs=null;   
  215.  private InitDB idb=null;   
  216.  ReadClobData(){   
  217.    idb=new InitDB();   
  218.  }   
  219.  public void getClob(String sql2) throws SQLException{   
  220.   Connection con=idb.getCon();   
  221.   try{   
  222.    con.setAutoCommit(false);//不设置自动提交   
  223.    System.out.println("sq2 is:"+sql2);   
  224.    rs=con.createStatement().executeQuery(sql2);   
  225.    while(rs.next()){   
  226.     oracle.sql.CLOB clob=(oracle.sql.CLOB)rs.getClob("doc");   
  227.     File f=new File("d:\\savedoc\\1.txt");   
  228.     BufferedReader in = new BufferedReader(clob.getCharacterStream());   
  229.     //setCharacterStream()方法,可用于将CLOB字段与字节流相关联,   
  230.              BufferedWriter out = new BufferedWriter(new FileWriter(f));   
  231.              int c;   
  232.              while ((c=in.read())!=-1) {   
  233.                   out.write(c);   
  234.               }   
  235.     out.close();   
  236.     in.close();   
  237.    }   
  238.   con.commit();//正式提交   
  239.   rs.close();   
  240.   }catch(Exception e){   
  241.    e.printStackTrace();   
  242.    con.rollback();   
  243.   }   
  244.  }   
  245. }   
  246. public class TestBlob {   
  247.  public static void main(String []args){   
  248.   String sql1="select * from cdl_test  for update";//悲观锁锁定需更新的行   
  249.   String sql2="select * from cdl_test";   
  250.   System.out.println("\t\t\t欢迎使用:");   
  251.   System.out.println("1:插入图片");   
  252.   System.out.println("2:插入文本");   
  253.   System.out.println("3:读取图片");   
  254.   System.out.println("4:读取文本");   
  255.   System.out.println("5:退出");   
  256.   System.out.println("请选择:")   
  257.   while(true){   
  258.    try{   
  259.     Scanner sc=new Scanner(System.in);   
  260.     int i=sc.nextInt();   
  261.     System.out.println("sss:"+i);   
  262.     switch(i){   
  263.      case 1:   
  264.       InsertBlobData isd=new InsertBlobData();   
  265.       isd.insertBlob(sql1); break;   
  266.      case 2:   
  267.       InsertClobData icd=new InsertClobData();   
  268.       icd.insertClob(sql1); break;   
  269.      case 3:   
  270.       ReadBlobData rb=new ReadBlobData();   
  271.       rb.getBlob(sql2); break;   
  272.      case 4:   
  273.       ReadClobData rc=new ReadClobData();   
  274.       rc.getClob(sql2); break;   
  275.      case 5:   
  276.       System.exit(0);   
  277.     }   
  278.    }catch(Exception e){   
  279.     e.printStackTrace();   
  280.    }   
  281.   }   
  282.  }   
  283. }  
分享到:
评论

相关推荐

    图片存入Oracle中,用clob和blob两种方式

    Oracle数据库系统支持这两种数据类型,用于存储大量文本数据和二进制数据。下面将详细介绍这两种数据类型以及如何在Oracle中使用它们存储和读取图片。 1. **CLOB数据类型**: `CLOB`数据类型用于存储大量的字符...

    能将数据存入数据库的文本编辑器

    在能导入字符串的richtextbox编辑器中,用户不仅可以输入和编辑文本,还可以进行更复杂的操作,例如插入图片、超链接等。同时,这个编辑器还能处理源代码,意味着它可以识别并高亮显示不同的编程语言,为开发者提供...

    用java编程将txt文件数据导入oracle

    "Java编程将TXT文件数据导入...通过使用 Java 语言编写程序,我们可以轻松地将 TXT 文件中的数据导入 Oracle 数据库,从而提高工作效率和数据处理能力。该程序的编写和应用可以广泛应用于数据处理、数据分析等领域。

    jsp+servlet+oracle上传图片到数据库(非路径)

    "jsp+servlet+oracle上传图片到数据库(非路径)"这个主题涉及的是一个常见的Web应用开发技术,它利用JavaServer Pages (JSP)、Servlet以及Oracle数据库来实现图片的上传和展示,而不是仅仅存储图片的路径。...

    网页在Oracle中存取图片

    网页在Oracle中存取图片是一项常见的技术操作,尤其在企业级应用中,为了高效管理和存储大量数据,数据库系统如Oracle经常被用作图片资源的存储地。以下将详细阐述这一主题,包括图片的存储方式、访问流程以及相关...

    Oracle导入导出图片及Excel(标注:没有源代码!)

    "Oracle导入导出图片及Excel"这个主题涉及到如何在Oracle环境中高效地处理非结构化的图片和Excel表格数据。由于没有提供源代码,我们将探讨一般性的方法和技术。 1. **Oracle BLOB类型**:Oracle数据库使用BLOB...

    delphi 文本存入数据库

    在Delphi编程环境中,将文本存入数据库是一项常见的任务,特别是在处理大量文本数据时,例如日志记录、用户输入或者数据分析。以下是一份详细的指南,介绍如何使用Delphi来实现这个功能。 首先,你需要选择一个...

    将长于4000字符的字符串转化为CLOB类型存入数据库

    在Oracle数据库中,当我们遇到需要存储超过4000个字符的文本数据时,使用CLOB(Character Large Object)类型便显得尤为重要。下面将详细介绍如何在C#环境下通过Oracle.NET接口实现将长于4000字符的字符串转化为CLOB...

    将图片存入数据库,并从数据库中读取

    虽然将图片存入数据库提供了一种集中存储和管理数据的方式,但这种方法也有一些潜在问题。例如,如果数据库中的图片数量庞大,可能会影响查询性能,因为数据库需要处理大量非结构化数据。此外,数据库可能不是理想的...

    Oracle照片的读取写入

    Oracle数据库作为其中的一款强大系统,不仅支持常见的数据类型,还提供了存储和检索图片的功能。本文将深入探讨如何在Oracle数据库中进行照片的读取与写入。 首先,我们需要了解如何将本地照片存入Oracle数据库。这...

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    本示例主要涉及的是如何将图片通过BASE64编码加密后存入数据库的Blob类型字段,并能从数据库中取出这些数据再还原成原始图片。以下是相关知识点的详细说明: 1. **BASE64编码**:BASE64是一种用于将二进制数据转换...

    Oracle大对象数据在C builder中的存入技术.pdf

    BLOB用于存储二进制数据,如图片、音频或视频文件,而CLOB和NCLOB则用于存储大文本信息。BFILE是特殊的外部LOB,数据存储在操作系统文件系统中。 在C++ Builder中处理LOB数据时,由于C++ Builder的MFC(Microsoft ...

    开发基于Oracle数据库的管理信息系统

    PB5的MLE(多行编辑器)用于编辑和显示文本,文本可以通过读取、预处理、存入LONG字段、查询和展示。这个过程涉及到文本的读写、替换和存储,展示了Oracle在处理非结构化数据方面的灵活性。 3. **处理图象文件**:...

    sql server中的image类型的数据导出到oracle的clob字段中

    在 Oracle 中,CLOB(Character Large OBject)类型用于存储大量的文本数据,如文章、文档、图片等。CLOB 字段可以存储大量的 Unicode 字符串数据,并提供了高效的读写机制。 将 Image 类型数据导出到 Oracle 的 ...

    PB-数据库保存图片并在Datawindow中显示

    一是直接将图片文件的二进制数据作为BLOB(Binary Large Object)类型存储,二是将图片转换为Base64编码字符串,然后存储为文本。在PB中,可以使用SQL语句或DBMS特定的函数来处理这种数据。 3. **DataWindow**:这...

    java将图片写入数据库,并读出来(blob clob)

    Blob用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储字符数据,比如长文本。以下是如何使用Java处理Blob类型的图像数据的详细步骤: 1. **连接数据库** 使用JDBC(Java Database Connectivity)API...

    iBATIS操作Oracle CLOB数据

    在IT行业中,数据库管理和数据操作是至关重要的环节。Oracle数据库是一个功能强大的关系型数据库管理系统,广泛应用于企业级...通过阅读指定的博客链接,可以获取更多关于iBATIS和Oracle CLOB操作的实战经验和技巧。

    运用Java如何存取Oracle中的CLOB类型字段

    在Java应用程序中通过JDBC与Oracle交互时,正确地读取和写入CLOB类型的数据变得尤为重要。本文将详细介绍如何使用Java对Oracle中的CLOB类型字段进行操作。 #### CLOB简介 CLOB是Oracle数据库用于存储大型文本数据...

    oracle支持的数据类型

    虽然理论上可以将图片和声音直接存入数据库,但在实际项目中,通常只存储文件路径,以减少数据库负载,除非对数据的安全性有极高要求,才会考虑直接存储。 了解并正确选择这些数据类型对于设计高效且适应需求的...

    Delphi将图片以二进制方式存储在数据库BLOB字段中.rar

    通过将图片转换为二进制数据并存储在数据库中,可以实现数据的高效管理,同时保持程序的稳定性和性能。这个过程中的关键是理解如何使用TStream对象以及如何在数据库组件中正确处理BLOB字段。通过深入学习和实践,...

Global site tag (gtag.js) - Google Analytics