`
liyunqi
  • 浏览: 18585 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

把本地硬盘里的图片存储到oracle数据库里blob的实现

阅读更多

转载自:http://heisetoufa.iteye.com/blog/227243

 

关键字: 图片 上传 数据库

数据库是oracle,字段是blob,代码语言是java,上传的可以是图片也可以是其他大文件,显示在浏览器里和保存在硬盘上不写在这篇文章里,写在下篇里

Java代码 复制代码
  1. import java.io.BufferedInputStream;   
  2. import java.io.FileInputStream;   
  3. import java.io.OutputStream;   
  4. import java.sql.Blob;   
  5. import java.sql.Connection;   
  6. import java.sql.DriverManager;   
  7. import java.sql.ResultSet;   
  8. import java.sql.SQLException;   
  9. import java.sql.Statement;   
  10.   
  11. import javax.swing.JFileChooser;   
  12.   
  13. import oracle.jdbc.driver.OracleConnection;   
  14.   
  15. public class Write   
  16. {   
  17.  public static void main(String[] args)   
  18.  {   
  19.   try {   
  20.    Writewatdb = new Write();   
  21.    watdb.sendToDb();   
  22.   } catch (SQLException e) {   
  23.    e.printStackTrace();   
  24.   } catch (ClassNotFoundException e) {   
  25.    e.printStackTrace();   
  26.   }   
  27.  }   
  28.  Connection conn;   
  29.  Statement stmt;   
  30.     
  31.  ResultSet rs;   
  32.  int bufferSize;   
  33.     
  34.  public Write() throws SQLException, ClassNotFoundException    
  35.  {   
  36.   String connectString;   
  37.   Class.forName("oracle.jdbc.driver.OracleDriver");   
  38.   connectString = "jdbc:oracle:thin:@192.168.1.134:1521:zhpt";   
  39.   conn = (OracleConnection)   
  40.   DriverManager.getConnection(connectString, "dzjc","dzjc");   
  41.     
  42.   stmt = conn.createStatement();   
  43.  }   
  44.  public void sendToDb()    
  45.  {   
  46.         int amount = 0;   
  47.   OutputStream out = null;   
  48.   BufferedInputStream in = null;   
  49.   JFileChooser chooser = new JFileChooser();   
  50.   int returnVal = chooser.showOpenDialog(null);   
  51.   if (returnVal == JFileChooser.APPROVE_OPTION)   
  52.   {   
  53.    pathname = chooser.getSelectedFile().getAbsolutePath();   
  54.    name = chooser.getSelectedFile().getName();   
  55.    chooser = null;   
  56.   }   
  57.   else  
  58.   {   
  59.    System.out.println("没有找到文件!");   
  60.    System.out.println("程序非正常结束...");   
  61.    return;   
  62.   }   
  63.   try  
  64.   {   
  65.    conn.setAutoCommit(false);   
  66.    stmt.executeUpdate("insert into dzjc_img(img) values (empty_blob())");   
  67.    rs = stmt.executeQuery("select img from dzjc_img for update");   
  68.    if (rs.next())    
  69.    {   
  70.     Blob blob = rs.getBlob("img");   
  71.     out = ( (oracle.sql.BLOB) blob).getBinaryOutputStream();   
  72.     bufferSize = ( (oracle.sql.BLOB) blob).getBufferSize();   
  73.     in = new BufferedInputStream(new FileInputStream(pathname), bufferSize);   
  74.     
  75.     byte[] b = new byte[bufferSize];   
  76.     int count = in.read(b, 0, bufferSize);   
  77.     while (count != -1)    
  78.     {   
  79.      out.write(b, 0, count);   
  80.      amount += count;   
  81.      System.out.println("处理了" + amount + "字节.");   
  82.      count = in.read(b, 0, bufferSize);   
  83.      System.out.println("处理了" + amount + "字节,成功.");   
  84.     }   
  85.     out.close();   
  86.     out = null;   
  87.     in.close();   
  88.     in = null;   
  89.     conn.commit();   
  90.    }   
  91.   }   
  92.   catch (Exception e)    
  93.   {   
  94.    e.printStackTrace();   
  95.    try    
  96.    {   
  97.     conn.rollback();   
  98.    }   
  99.    catch (Exception ignored) {}   
  100.   }   
  101.   finally    
  102.   {   
  103.    if (out!=nulltry{out.close();} catch(Exception igored){}   
  104.    if (in!=nulltry{in.close();} catch(Exception igored){}   
  105.   }   
  106.  }   
  107. }  
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JFileChooser;

import oracle.jdbc.driver.OracleConnection;

public class Write
{
 public static void main(String[] args)
 {
  try {
   Writewatdb = new Write();
   watdb.sendToDb();
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
 }
 Connection conn;
 Statement stmt;
 
 ResultSet rs;
 int bufferSize;
 
 public Write() throws SQLException, ClassNotFoundException 
 {
  String connectString;
  Class.forName("oracle.jdbc.driver.OracleDriver");
  connectString = "jdbc:oracle:thin:@192.168.1.134:1521:zhpt";
  conn = (OracleConnection)
  DriverManager.getConnection(connectString, "dzjc","dzjc");
 
  stmt = conn.createStatement();
 }
 public void sendToDb() 
 {
        int amount = 0;
  OutputStream out = null;
  BufferedInputStream in = null;
  JFileChooser chooser = new JFileChooser();
  int returnVal = chooser.showOpenDialog(null);
  if (returnVal == JFileChooser.APPROVE_OPTION)
  {
   pathname = chooser.getSelectedFile().getAbsolutePath();
   name = chooser.getSelectedFile().getName();
   chooser = null;
  }
  else
  {
   System.out.println("没有找到文件!");
   System.out.println("程序非正常结束...");
   return;
  }
  try
  {
   conn.setAutoCommit(false);
   stmt.executeUpdate("insert into dzjc_img(img) values (empty_blob())");
   rs = stmt.executeQuery("select img from dzjc_img for update");
   if (rs.next()) 
   {
    Blob blob = rs.getBlob("img");
    out = ( (oracle.sql.BLOB) blob).getBinaryOutputStream();
    bufferSize = ( (oracle.sql.BLOB) blob).getBufferSize();
    in = new BufferedInputStream(new FileInputStream(pathname), bufferSize);
 
    byte[] b = new byte[bufferSize];
    int count = in.read(b, 0, bufferSize);
    while (count != -1) 
    {
     out.write(b, 0, count);
     amount += count;
     System.out.println("处理了" + amount + "字节.");
     count = in.read(b, 0, bufferSize);
     System.out.println("处理了" + amount + "字节,成功.");
    }
    out.close();
    out = null;
    in.close();
    in = null;
    conn.commit();
   }
  }
  catch (Exception e) 
  {
   e.printStackTrace();
   try 
   {
    conn.rollback();
   }
   catch (Exception ignored) {}
  }
  finally 
  {
   if (out!=null) try{out.close();} catch(Exception igored){}
   if (in!=null) try{in.close();} catch(Exception igored){}
  }
 }
}

 可直接运行

数据库就自己建吧,建个类型为blob型的就行了

分享到:
评论

相关推荐

    批量导出ORACLE数据库BLOB字段生成图片

    批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将数据库中的图片资源导出到本地文件系统的情况。下面将详细介绍这一过程及其相关知识点。 首先,我们需要理解BLOB类型。BLOB...

    如何用DELPHI实现把WORD、EXCEL和图片等存储到数据库

    总之,通过Delphi结合数据库组件和适当的文件处理技术,可以轻松地将Word、Excel和图片等非结构化数据存储到数据库中。在实际项目中,务必根据项目需求选择合适的数据库组件和第三方库,以实现高效、稳定的数据存储...

    jsp 上传图片并保存到数据库里的servlet代码和jsp代码

    本主题将深入探讨如何使用JSP和Servlet来实现一个图片上传功能,并将图片数据存储到Oracle数据库中。 首先,我们需要理解JSP和Servlet的角色。JSP是用于创建动态内容的视图层技术,而Servlet则是Java编写的应用程序...

    怎样用VBA将EXCEL中的图片存入Oracle数据库(利用临时文件方式)

    标题“怎样用VBA将EXCEL中的图片存入Oracle数据库(利用临时文件方式)”涉及到的知识点主要包括: 1. **VBA(Visual Basic for Applications)编程**:VBA是Microsoft Office套件中的一种内置编程语言,允许用户...

    ORACLE数据库中插入大字段数据的解决方法

    在ORACLE数据库中插入大字段数据时,可能会遇到性能问题或者由于字段长度限制导致的错误。这类问题通常涉及LOB(Large Object)类型的字段,如CLOB(Character Large Object)和BLOB(Binary Large Object)。本篇...

    oracle数据库知识.pptx

    1. 物理结构:Oracle数据库由存储在硬盘上的数据文件(datafiles)、重做日志文件(redo log files)、控制文件(control files)和参数文件(parameter file)组成。这些文件是数据库运行的基础,可以根据需求动态...

    oracle+hibernate 处理blob +uploadify实例

    `uploadImg`方法会解析`HttpServletRequest`,找到上传的文件,然后将文件内容读取到内存或磁盘,最后通过Hibernate保存到Oracle数据库中。具体实现通常会涉及到解析文件项,获取文件内容,创建`Learner`对象并调用...

    DELPHI存取JPEG、BMP图像到数据库完整解决方案

    这篇教程将详细介绍如何在DELPHI中实现JPEG和BMP图像的读取、处理以及存储到数据库的操作,提供一个完整的解决方案。 1. 图像处理库: DELPHI自带的VCL(Visual Component Library)框架提供了丰富的图像处理组件...

    oracle数据库基本操作讲义.pptx

    BLOB用于存储二进制大对象,如图片或文档;CLOB用于存储字符大对象,如文本;以及BOOLEAN等其他类型。 Sql/Plus是Oracle提供的一种命令行工具,用于执行SQL语句和PL/SQL块,进行数据库管理和开发。在Sql/Plus环境中...

    将图片以字节流存到数据库再从数据库获取显示

    在图片存储场景中,图片的像素信息被转化为字节流,便于在内存和磁盘之间传输,以及在网络上传输。 1. **图片转字节流** 在Java或.NET等编程语言中,我们可以使用相关的类库来读取图片文件并将其转换为字节流。...

    ORACLE基础学习培训课件.pptx

    在数据类型方面,Oracle支持多种类型,如VARCHAR2用于存储可变长度的字符串,NUMBER用于存储数字,DATE类型用于记录日期和时间,ROWID是表中每一行的唯一标识,BLOB用于存储非结构化的二进制大对象,如图片和视频,...

    数据库图片提取功能(多线程)

    总的来说,数据库图片提取功能结合多线程和回调技术,提供了一种高效且灵活的方式,从Oracle数据库中检索和保存大量的图片数据,优化了系统性能并提供了良好的用户体验。在实际应用中,这样的功能对于需要大量处理...

    Oracle 表结构.docx

    最后,`ROWID`是Oracle数据库中每一行记录的唯一标识符,它是一个伪列,包含了表中每条记录在磁盘上的精确位置。`ROWID`对于数据库的查询和定位非常有用,特别是在数据恢复或者优化查询性能时。 总结来说,理解...

    Oracle 数据类型

    7、LOB数据类型用于存储大型的,没有被结构化的数据,例如二进制文件,图片文件,LOB主要分为BLOB和CLOB,BLOB数据类型用于存储二进制对象:图像,音频,视频...CLOB数据类型用于存储字符格式的大型对象 8、ORACLE...

    JSP Servlet 图片上传

    在实际应用中,如果需要持久化图片数据,可以将图片数据存储到数据库的BLOB字段,Oracle数据库支持这种操作。 7. **MyEclipse集成** MyEclipse作为强大的Java EE开发工具,提供了创建、调试JSP和Servlet的便利。...

    C#将word文件存入数据库与读取(Web版)

    2. **文件存储到数据库**:在Web应用中,直接将文件存储在服务器磁盘上可能不安全且不易管理。因此,常选择将文件内容存入数据库。常见的做法是将文件转换为字节数组,然后存入数据库的BLOB(Binary Large Object)...

    Oracle表管理.pptx

    此外,还有`BLOB`用于存储二进制大对象,如图片或音频。 创建表是数据库操作的基础,可以通过`CREATE TABLE`语句完成。修改表结构,如添加、修改或删除字段,可以使用`ALTER TABLE`语句。例如,添加字段`sex`: ``...

    文件上传需要的jar包

    在文件上传的上下文中,ojdbc6.jar帮助将图片或其他文件的相关元数据存储到数据库,并可能将文件本身以二进制大对象(BLOB)的形式存储。 2. **commons-io-2.4.jar**:Apache Commons IO是一个Java库,包含了一系列...

Global site tag (gtag.js) - Google Analytics