存入图片至ORACLE及从ORACLE读取图片方法整理

原创 2004年08月27日 10:35:00

一、将图片存入Oracle数据库

示例表NEWS的结构为:newsid number(10),title varchar2(100),image(blob)

方法1:利用OracleCommandBuilder类(该类用于自动生成用于协调 DataSet 的更改与关联的数据库的单表命令。)

        Dim cn As New OracleConnection("data source=site;uid=gf;pwd=macro;")
        cn.Open()

        Dim da As New OracleDataAdapter("select * from news", cn)
        Dim myCB As New OracleCommandBuilder(da)
        Dim ds As New DataSet("news")
        da.MissingSchemaAction = MissingSchemaAction.AddWithKey
        Dim fs As Stream = File1.PostedFile.InputStream 'File1为文件选择框,作为服务器控件使用
        Dim mydata(fs.Length) As Byte
        fs.Read(mydata, 0, fs.Length)
        fs.Close()
        da.Fill(ds, "news")
        Dim myRow As DataRow = ds.Tables("news").NewRow
        myRow("newsid") = txtNewsID.Text
        myRow("title") = txtTitle.Text
        myRow("image") = mydata
        ds.Tables("news").Rows.Add(myRow)
        da.Update(ds, "news")

        cn.Close()

方法2:利用过程

事先定义的Oracle过程为:

CREATE OR REPLACE  PROCEDURE "GF"."NEWS_ADD" 
  (in_newsid in 
   news.newsid%type,
   in_title in news.title%type,
   in_imag in news.image%type)
   as
   begin
       insert into gf.news values(in_newsid,in_title,in_image);
   end;

下面是将数据存入数据库的代码:

        Dim cn As New OracleConnection("data source=site;uid=gf;pwd=macro;")
        cn.Open()

        Dim cmd As New OracleCommand("news_add", cn)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Add(New OracleParameter("in_newsid", OracleType.Number, 10))
        cmd.Parameters("in_newsid").Value = txtNewsID.Text.Trim
        cmd.Parameters.Add(New OracleParameter("in_title", OracleType.VarChar, 100))
        cmd.Parameters("in_title").Value = txtTitle.Text.Trim

        Dim fs As Stream = File1.PostedFile.InputStream
        Dim mydata(fs.Length) As Byte '定义一个字节数组用于读取图片流
        fs.Read(mydata, 0, fs.Length)
        fs.Close()

        cmd.Parameters.Add(New OracleParameter("in_image", OracleType.Blob))
        cmd.Parameters("in_image").Value = mydata

        cmd.ExecuteNonQuery()

        cn.Close()

二、从Oracle数据库中读出图片

方法1:从数据库中读取数据并以文件形式保留在服务器上

        Dim conn As New OracleClient.OracleConnection
        Dim cmd As New OracleClient.OracleCommand
        Dim myReader As OracleClient.OracleDataReader
        Dim sql As String
        Dim fl As File

        sql = "select * from news where newsid=3211"  '从数据库中取出图片数据 blob
        conn.ConnectionString = "Password=macro;User ID=gf;Data Source=site"
        cmd.CommandText = sql
        cmd.Connection = conn

        conn.Open()
        myReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
        myReader.Read()

        Label1.Text = myReader("title")

        Dim fs As FileStream                 ' Writes the BLOB to a file (*.bmp).
        Dim bw As BinaryWriter               ' Streams the binary data to the FileStream object.
        Dim bufferSize As Integer = 1000      ' The size of the BLOB buffer.
        Dim outbyte(bufferSize - 1) As Byte  ' The BLOB byte() buffer to be filled by GetBytes.
        Dim retval As Long                   ' The bytes returned from GetBytes.
        Dim startIndex As Long = 0           ' The starting position in the BLOB output.      
        Dim fpath As String

        '将图片数据存成本地文件
        fpath = Server.MapPath(Request.ApplicationPath) & "/Image/photo.bmp"
        fs = New FileStream(fpath, FileMode.OpenOrCreate, FileAccess.Write)
        bw = New BinaryWriter(fs)

        ' Reset the starting byte for a new BLOB.
        startIndex = 0

        ' Read bytes into outbyte() and retain the number of bytes returned.
        retval = myReader.GetBytes(2, startIndex, outbyte, 0, bufferSize) 'GetBytes返回字段中的可用字节数,第一个参数为从0开始的列序号

        ' Continue reading and writing while there are bytes beyond the size of the buffer.
        Do While retval = bufferSize
            bw.Write(outbyte)
            bw.Flush() '清理当前编写器的所有缓冲区,使所有缓冲数据写入基础设备。

            ' Reposition the start index to the end of the last buffer and fill the buffer.
            startIndex = startIndex + bufferSize
            retval = myReader.GetBytes(2, startIndex, outbyte, 0, bufferSize)
        Loop

        ' Write the remaining buffer.
        bw.Write(outbyte)
        bw.Flush()

        ' Close the output file.
        bw.Close()
        fs.Close()

        ' Close the reader and the connection.
        myReader.Close()
        conn.Close()

        Dim logo As Image               '文件格式转换
        logo = Image.FromFile(fpath)
        fpath = Server.MapPath(Request.ApplicationPath) & "/Image/zkjhy.jpeg"
        logo.Save(fpath, System.Drawing.Imaging.ImageFormat.Jpeg)

        'Me.Image1.Width = New Unit(300) '调整显示大小
        'Me.Image1.Height = New Unit(350)
        Me.Image1.ImageUrl = "image/zkjhy.jpeg"

版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle存入图片和读取图片

package com.kevinb.image;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFo...
  • woaitiyu
  • woaitiyu
  • 2008年10月25日 09:11
  • 11127

从Oracle中数据库中读取以Blob类型存储的图片显示在jsp页面中

在之前的项目中做文件上传的时候比较多。实现文件上传,我们有两种实现思路:第一就是将文件上传到服务器的某一位置,然后在数据库中存储文件的服务器上的位置。第二就是直接把文件存储到数据库中。   图片也是文...
  • wangyajin333
  • wangyajin333
  • 2015年10月31日 19:48
  • 3056

Oracle系列:图片的存储

Oracle系列:图片的存储一:什么是大对象,大对象基本操作? 参见我的BLOG:Oracle系列:LOB大对象处理 http://blog.csdn.net/qfs_v/archive/2008/0...
  • qfs_v
  • qfs_v
  • 2008年05月21日 11:25
  • 5932

Oracle如何插入图片数据?

1、创建表,注意:插入图片的列要定义成BLOB类型   create table image_lob(t_id varchar2(5) not null,t_image blob not null)...
  • avenccssddnn
  • avenccssddnn
  • 2013年02月07日 15:26
  • 5660

使用java语言向oracle数据库中存入、取出图片及文件

其实,向数据库中存图片及其他任何文件都是一样的方法,都是用IO流以二进制的方式存入和取出的,本质上跟操作IO流没有什么差别,只是多了一个数据库访问而已。一下程序是我写的两个小Demo,一个存入文件,一...
  • u014740338
  • u014740338
  • 2015年09月20日 13:42
  • 801

存入图片至ORACLE及从ORACLE读取图片方法整理

一、将图片存入Oracle数据库    示例表NEWS的结构为:newsid number(10),title varchar2(100),image(blob)    方法1:利用Oracl...
  • sqlove
  • sqlove
  • 2014年03月10日 09:15
  • 5708

c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库

转自:http://heisetoufa.iteye.com/blog/262798   using System; using System.Collections.Generic; usi...
  • dreamgis
  • dreamgis
  • 2013年08月06日 10:26
  • 816

C# 将图片的base64编码保存到Oracle数据库中

在Oracle中处理文件存储的方式是使用它自身的称为Orcale大对象内的类型也就是Oracle LOB 大对象 LOB对象有4种类型分别为: blob:二进制lob,为二进制数据,最长可达4GB...
  • u012803075
  • u012803075
  • 2016年08月17日 12:19
  • 2014

Java —— JAVA读取Oracle中的blob图片字段并显示

近期,在给客户做一个Demo页面时,需要用JAVA读取Oracle中的blob图片字段并显示,在此过程中,遇到一些问题,例如:连接Oracle数据库读取blob字段数据,对图片byte数据进行缩放等;...
  • u012913404
  • u012913404
  • 2016年04月01日 16:11
  • 3563

c#+oracle实现读取图片并显示在picturebox中

废话不多说,先上结果图。     最近做某旅游系统,需要一个窗口来显示旅游景点的信息。主要内容包括名称、图片和描述。系统的数据库是位于阿里云服务器上的oracle,系统是用c#开发的winform...
  • skytruine
  • skytruine
  • 2017年05月10日 15:01
  • 712
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:存入图片至ORACLE及从ORACLE读取图片方法整理
举报原因:
原因补充:

(最多只允许输入30个字)