`
wangjunwj
  • 浏览: 38804 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

用Java程序往oracle写入 和读出 图片

阅读更多

--------写入Oracle的图片

 

 

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.sql.BLOB;

public class JdbcDemo {
 public static void main(String[] args) {
  JdbcDemo obj=new JdbcDemo();
  obj.append_pic_to_Oracle();
 }
 private void append_pic_to_Oracle()
 {
  Connection conn=null;
  BLOB blob=null;
  int foodid=84;
  try {

//加载驱动
   Class.forName("oracle.jdbc.driver.OracleDriver");
   String url="jdbc:oracle:thin:@10.18.45.17:1521:orcl";
   conn=DriverManager.getConnection(url,"wangjun","wangjun");
   conn.setAutoCommit(false);  //把默认提交关闭,即开启了JDBC连接事务

//seq_foodinfo 是一个序列
   String sql="insert into foodinfo values(seq_foodinfo.nextval,?,?,?,empty_blob(),?)";
   PreparedStatement pstmt=conn.prepareStatement(sql);
   pstmt.setString(1, "拉面");
   pstmt.setString(2,"原料:青菜、猪肉、海带、骨头口味");
   pstmt.setDouble(3, 4);
   pstmt.setString(4, "好吃");

//没有返回值就用update
   pstmt.executeUpdate();
   pstmt.close();
   strsql="select image from foodinfo where foodid=? for update";  //锁定即将要更新的记录
   pstmt=conn.prepareStatement(strsql);
   pstmt.setInt(1, foodid);
   ResultSet rs= pstmt.executeQuery();
   if(rs.next())
   {

//当前找到blob
    blob= (BLOB)rs.getBlob(1);
   }
   File f=new File("d:/funny/images/500024.jpg");
   FileInputStream fis=null;
   if(f.exists())
   {


    fis=new FileInputStream(f);
   }
   strsql="update foodinfo set image=? where foodid=?";
   pstmt=conn.prepareStatement(strsql);
   OutputStream os=blob.getBinaryOutputStream();

//为图片开辟一条缓存空间
   byte[] buffer=new byte[(int)f.length()];
   fis.read(buffer);
   os.write(buffer);
   fis.close();
   os.close();
   pstmt.setBlob(1, blob);
   pstmt.setInt(2, foodid);
   pstmt.executeUpdate();
   conn.commit();
  } catch (Exception e) {
   try {
    conn.rollback();
   } catch (SQLException e1) {
    e1.printStackTrace();
   }
   e.printStackTrace();
  }
  finally
  {
   try {

//连接不等于空或者没有关闭的时候
    if(conn!=null || !conn.isClosed())
    {
     conn.close();
    }
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 
}

 

 

 

 

 

------------------------------------------------------------------------------

----------------在网页中输入图片

 

 

 

先建一个数据库的公用类  DBSession.java  

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBSession {
 private static final String DRIVER="oracle.jdbc.driver.OracleDriver";
 private static final String URL="jdbc:oracle:thin:@10.18.45.17:1521:orcl";
 private static final String USERNAME="wangjun";
 private static final String PWD="wangjun";
 public static Connection getConnection(){
  Connection conn=null;
  try {
   Class.forName(DRIVER);
   conn=DriverManager.getConnection(URL,USERNAME,PWD);
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return conn;
 }
 public static void closeConn(Connection conn)
 {
  try {
   if(conn!=null || !conn.isClosed())
   {
    conn.close();
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}

 

 

 

在写一个取出图片的servlet 类

 

 

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.webapp.comm.DBSession;

public class GetPicture extends HttpServlet{

 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String foodid =request.getParameter("foodid");
  response.setContentType("image/jpg");
  Connection conn=DBSession.getConnection();
  String strsql="select image from foodinfo where foodid=?";
  try {
   PreparedStatement  pstmt=conn.prepareStatement(strsql);
   pstmt.setInt(1,Integer.parseInt(foodid));
   ResultSet rs=pstmt.executeQuery();
   if(rs.next())
   {
    Blob blob= rs.getBlob(1);
    InputStream is= blob.getBinaryStream();
    OutputStream os= response.getOutputStream();
    byte[] buffer=new byte[1024*4];
    int sss=0;
    while((sss=is.read(buffer))!=-1)
    {
     os.write(buffer,0,sss);
    }
    is.close();
    os.flush();
    os.close();
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  finally
  {
   DBSession.closeConn(conn);
  }
 }
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
 }
  
}

 

 

 

在写一个jsp代码 能去取出代码 

<html>
  <head>
    <title></title>
  </head>
  <body>
    <img  src="getPic?foodid=${param.foodid}" >
  </body>
</html>

 

分享到:
评论

相关推荐

    java批量图片上传

    Java可以使用JDBC API来操作BLOB字段,将图片数据写入或读出。 批量上传时,为了提高性能和减少内存消耗,可以采用流式处理。例如,利用`InputStream`和`OutputStream`直接读写文件,避免一次性加载整个文件到内存...

    数据库读入、读出图片资料

    例如,使用Java的JDBC,可以使用`ResultSet.getBinaryStream()`方法获取流,然后用`FileOutputStream`写入文件。 4. **性能优化**: 图片存储在数据库中可能影响性能,因为I/O操作相对昂贵。考虑将图片存储在文件...

    使用JDBC4.0操作Oracle中BLOB类型的数据方法

    要从数据库中读出文件,可以使用以下Java代码: ```java public void readBlob() throws SQLException, IOException { String sql = "SELECT image FROM blobmodel WHERE blobid=?"; DBHelper.getConnection(); ...

    yy.rar_oracle_台账

    本文将深入探讨如何使用Oracle数据库构建一个台账管理系统,并通过后台登录系统实现数据的写入与读出。 Oracle数据库是全球领先的数据库解决方案之一,它提供了丰富的数据类型、高级的事务处理能力和强大的安全性。...

    java io一些探讨

    ### Java IO 概念与基础知识 #### 一、Java IO 的概念和...通过以上内容,我们可以了解到Java IO的基础知识、常用流的特性和使用方法,以及如何进行性能优化等方面的知识点。这对于理解Java程序中的IO操作非常关键。

    使用JDBC4.0处理Oracle中BLOB类型的数据

    在Java的JDBC4.0版本中,处理Oracle数据库中的BLOB(Binary Large Object)类型数据是一项常见的任务,尤其在存储和检索大容量的二进制数据,如图像、音频或视频文件时。本篇文章将深入讲解如何使用JDBC4.0与Oracle...

    webword

    这些数据可以通过WebWord的API写入或读出到Word文档中。 4. **安全性与权限**:由于涉及到用户数据和数据库操作,安全性是个重要问题。开发者需要确保所有数据库操作都经过验证和授权,防止未授权的访问或修改。 5...

    jsp读取大对象CLOB并生成xml文件示例.docx

    - 在处理文本数据时,需要注意字符编码的一致性,确保从数据库读取的数据与文件写入时使用的编码一致。 2. **性能优化**: - 当处理大量数据时,应考虑使用流式处理来减少内存占用。 - 考虑使用更高效的字符集...

    详解jdbc实现对CLOB和BLOB数据类型的操作

    对CLOB和BLOB数据类型的操作是非常重要的,特别是在使用Java数据库连接(JDBC)时。本文将详细介绍JDBC实现对CLOB和BLOB数据类型的操作,包括读取和写入操作。 CLOB数据类型 CLOB数据类型用于存储大型字符数据,如...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅...

Global site tag (gtag.js) - Google Analytics