<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
  <%      //首先是将文件输入到数据库。
      Class.forName("oracle.jdbc.driver.OracleDriver");//注册数据库引擎。
      String dbURL = "jdbc:oracle:thin:@192.168.1.69:1521:mtnet";
      String user = "mtuser";
      String passWord = "user";
      Connection conn = DriverManager.getConnection(dbURL, user, passWord);
      conn.setAutoCommit(false);//关闭自动提交,以提高性能。
      Statement stmt = conn.createStatement();//建立会话      String sqlStr = "";
      String fileName = "";
      String displayMessage = "";
      try
      {        File file = new File("D:\\test.jpg");
        fileName = file.getName();
        FileInputStream inStream = new FileInputStream(file);//创建输入流,将外部文件输入到InputStream 中。
        byte[] buffer = new byte[inStream.available()];
        sqlStr = "INSERT INTO edu_pic(pictitle,picdata) VALUES ('" + fileName + "', empty_blob())";
        stmt.execute(sqlStr);
        ResultSet rs = stmt.executeQuery("select picdata from edu_pic where pictitle='" + fileName + "' for update");
        if(rs.next())
        {
          oracle.sql.BLOB blob = ((oracle.jdbc.OracleResultSet)rs).getBLOB("picdata");
          OutputStream outStream = blob.getBinaryOutputStream();
          inStream.read(buffer);
          outStream.write(buffer);
          outStream.flush();
          stmt.execute("commit");
          outStream.close();
          System.out.println("文件成功写入数据库");
        }
        inStream.close();
        rs.close();
      }
      catch(SQLException e)
      {
        e.printStackTrace();
        System.out.println("数据库异常1:" + e.getMessage());
      }%>

解决方案 »

  1.   

    import java.io.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.sql.*;
    import oracle.jdbc.driver.*;public class ShowBlob extends HttpServlet{
     public void doGet(HttpServletRequest req,
    HttpServletResponse res) throws ServletException,IOException{
    doPost(req,res);
     }
     public void doPost (HttpServletRequest req,
    HttpServletResponse res) throws ServletException,IOException{
    try{
     DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
     String url = "jdbc:oracle:thin:@localhost:1521:orcl";
       String name=req.getParameter("blobname");
     Connection conn = DriverManager.getConnection (url, "coca","coca");
       Statement stmt = conn.createStatement ();
     ResultSet rset = stmt.executeQuery ("select type,content,head from webblob where name like '%"+name+"%'");
     if(rset.next()){
        String contentType=rset.getString(1);
        System.err.println(contentType);
        if (contentType.length()>0){
         res.setContentType(contentType);
        }
        else{
         res.setContentType("unknown/unknown");
        }
        //res.setHeader("Content-disposition",rset.getString(3));
        System.err.println("Content-disposition:"+rset.getString(3));
        Blob blob=rset.getBlob(2);
        ServletOutputStream out = res.getOutputStream ();
        BufferedInputStream bis =new BufferedInputStream(blob.getBinaryStream());
        BufferedOutputStream bos = new BufferedOutputStream(out);
        byte[] buff = new byte[2048];
        int bytesRead;
        while((bytesRead = bis.read(buff, 0, buff.length))!=-1) {
         bos.write(buff, 0, bytesRead);
        }
       }
       else{
    PrintWriter out = res.getWriter();
    out.println("没有检索到符合条件的数据!");
       }
       rset.close();
       stmt.close();
       conn.close();
    }
    catch (SQLException e) {
    res.setContentType("text/html;charset=gb2312");
    PrintWriter out = res.getWriter();
    out.println("<html><body>jdbc 错误"+e.getMessage()+"</body></html>");
    }
    catch(IOException ioe) {
     res.setContentType("text/html;charset=gb2312");
     PrintWriter out = res.getWriter();
     out.println("<html><body>系统出错!"+ioe.getMessage()+"</body></html>");
    }
     }
    }
      

  2.   

    请问,peanz(似水流年) 你有没有读取的例子,谢谢!hellanti(笑看神侠)朋友,能否主要讲解一下
    res.setContentType(contentType);//其中contentType是什么格式比如文件为jpg格式,谢了
      

  3.   

    一时找不到,研究一下hellanti(笑看神侠)的吧,意思差不多。
      

  4.   

    对于oracle而言,超过4k字节的数据依然会存到数据库行外边,不会存到数据行里边,操作起来更简单,对于小的图片,比如身份正照片,我觉得存在数据库中更好,操作更方便
      

  5.   

    同时oracle支持一种BFILE外部存储格式,原理就是将图片存储到系统里边,数据库中存储文件名称,只不过不支持事务管理
      

  6.   

    还有没有哪位高人有关于图片读取并显示的例子,jsp,或者frame都可以