`

java 向mysql插入blob的图片以及从mysql读取图片并用jsp显示及CLOB

阅读更多

 

插入图片:
注意如果mysql是gbk编码的要先把mysql的字符集设置Latin1,输入完图片后再设回来

import java.sql.*;
import java.io.*;
class InsertPhoto{
public static void main(String[] args) throws Exception{
   Class.forName("com.mysql.jdbc.Driver");
   Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/tjphotodb?user=root&password=root");
   File f = new File("c:/test.jpg");
   FileInputStream fis = new FileInputStream(f);
   String sql = "insert into tjphotodb.t_photo(alarmid,photoblob) values(0,?)";
   PreparedStatement pstmt = con.prepareStatement(sql);
   pstmt.setBinaryStream(1,fis,(int)f.length());
   pstmt.executeUpdate();
   fis.close();
   pstmt.close();
   con.close();
}
}

 
读取并显示图片:
后台用一个servlet来读取,然后让前台的jsp显示
后台servlet:

public static InputStream query_getPhotoImageBlob(int id){
   String sql = "select photoblob from "+DB_TABLE_PHOTO+" where id="+id;
   Connection con = null;
   Statement stmt = null;
   ResultSet rs = null;
   InputStream result = null;
   try {
    con = getConnection();
    stmt = con.createStatement();
    rs = stmt.executeQuery(sql);
    if (rs.next())
    result = rs.getBlob("photoblob").getBinaryStream();
   } catch (SQLException e) {
    // TODO: handle exception
    System.err.println(e.getMessage());
   }finally{
    closeConnection(rs,stmt,con);
   }
   return result;
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   if (request.getParameter("id") != null){
   response.setContentType("image/jpeg");
    InputStream is = DBUtil.query_getPhotoImageBlob(Integer.valueOf(request.getParameter("id")).intValue());
    if (is != null){
     try {
     is = new BufferedInputStream(is);
      BufferedImage bi = ImageIO.read(is);
      OutputStream os = response.getOutputStream();
      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
      encoder.encode(bi);
      os.close();
      is.close();
     } catch (IOException e) {
      // TODO: handle exception
      System.err.println(e.getMessage());
     }
    }
   }
}

 
前台jsp:

<img style="width:320px;height:240px" src="<%=helper.HTMLHelper.getProjectPath(request) %>/servlet/genImage?id=<%=request.getParameter("id")%>"/>
 

 

 

 

 

 

import java.io.*;
import java.sql.*;
                                                                               
public class DBTest {
    public static void main(String[] args) {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/upload?useUnicode=true&characterEncoding=Big5";
        String user = "caterpillar";
        String password = "123456";
        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, user, password);
            
            File file = new File("./logo_phpbb.jpg");
            int length = (int) file.length();
            InputStream fin = new FileInputStream(file);
            
            PreparedStatement pstmt = conn.prepareStatement(
                       "INSERT INTO files VALUES(?, ?)");
            pstmt.setString(1, "Logo");
            pstmt.setBinaryStream (2, fin, length);
            pstmt.executeUpdate();
            pstmt.clearParameters();
            pstmt.close();
            fin.close();
            
            Statement stmt = conn.createStatement();
            ResultSet result = stmt.executeQuery("SELECT * FROM files");
            result.next();
            String description = result.getString(1);
            Blob blob = result.getBlob(2);
             
            System.out.println("描述:" + description);
            FileOutputStream fout = new FileOutputStream("./logo_phpbb_2.jpg");              
            fout.write(blob.getBytes(1, (int)blob.length()));
            fout.flush();
            fout.close();
                                                                               
            stmt.close();
            conn.close();
        }
        catch(ClassNotFoundException e) {
            System.out.println("找不到驱动");
            e.printStackTrace();
        }
        catch(SQLException e) {
            e.printStackTrace();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }
}
分享到:
评论

相关推荐

    Mybatis 处理 CLOB、BLOB 类型数据

    Mybatis 处理 CLOB、BLOB 类型数据 MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis 框架时,如何正确地处理大字段类型的数据。CLOB(Character Large OBject)和 BLOB(Binary Large OBject)都是大字段类型...

    CLOB、BLOB___CLOB与BLOB的区别

    CLOB、BLOB 与 CLOB 与 BLOB 的区别 CLOB(Character Large OBject)是一种数据库类型,用于存储大型字符对象。它是 SQL 类型,用于存储字符大对象(Character Large Object),将字符大对象存储为数据库表某一行中...

    jsp操作mysql数据库的blob字段

    在这个场景中,我们关注的是如何使用Java Server Pages(JSP)来操作MySQL数据库中的Blob(Binary Large Object)字段,这是一个用于存储大容量二进制数据如图片、文档或音频文件的特殊字段类型。以下是关于这个主题...

    向数据库插入blob数据实例源码--在mysql中通过

    Blob(Binary Large Object)在数据库中用于存储二进制大对象,如图片、音频或视频文件等...源码中可能包含了类似的实现,通过解压提供的"向数据库插入blob数据实例源码"压缩包,你可以查看并运行完整的Java代码示例。

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

    要从数据库读取图片,你需要执行一个SELECT查询,获取Blob对象,然后将其转换回图片文件。 ```java ResultSet rs = stmt.executeQuery("SELECT imageData FROM images WHERE id = ?"); if (rs.next()) { Blob ...

    oracle中的BLOB(照片)转换到mysql中

    然后,通过类似的方法,读取本地文件并将其内容插入到MySQL的BLOB字段中。在Java中,你可以使用`PreparedStatement`的`setBinaryStream()`方法: ```java FileInputStream in = new FileInputStream(...

    从mysql数据库中批量下载Blob图片到本地

    5. **读取Blob数据**:遍历结果集,对于每一行,使用`ResultSet.getBlob()`获取Blob对象,然后调用`Blob.getBytes()`获取图片的字节数组。 6. **保存图片**:将字节数组写入本地文件,可以使用`java.io....

    QT-Mysql-Blob.zip_mysql blob_qt blob 文件_qt blob类型_qt的blob

    当我们需要在MySQL数据库中处理大对象(Binary Large Object,简称BLOB)时,如图片、音频或视频等非文本数据,就需要结合MySQL和Qt来完成。下面我们将详细讨论如何在MySQL和Qt环境下对BLOB数据类型进行操作。 首先...

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

    在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...

    mysql,blob格式存储图片事例,商品展示页面

    4. **查询与显示图片**:从数据库中获取图片时,需要将BLOB数据还原成原始的图片格式。在网页端,可以使用后端语言(如PHP、Python或Node.js)处理这个过程,然后将图片数据发送给前端展示。例如,用PHP可以这样处理...

    mysql和Oracle在对clob和blob字段的处理

    `CLOB`用于存储非结构化的字符数据,如长篇文章、XML文档等,而`BLOB`则用于存储二进制大对象,如图片、音频或视频文件。在处理这些大型数据时,数据库系统需要考虑存储效率、性能和查询能力。 1. MySQL对`CLOB`和`...

    jsp1.rar_jsp blob_jsp 图片_mysql blob_图片 MySQL

    `jsp1.rar_jsp blob_jsp 图片_mysql blob_图片 MySQL`这个标题和描述指向了一个具体的场景:使用JSP(JavaServer Pages)从MySQL数据库中读取存储为BLOB(Binary Large Object)类型的图片数据。 首先,我们来理解...

    clob-blob.rar_blob and clob_clob_java CLOB_java oracle cl_oracle

    标题"Clob-blob.rar_blob and clob_clob_java CLOB_java oracle cl_oracle"暗示了这个压缩包包含的资源是关于使用Java操作Oracle数据库中的CLOB和BLOB字段的示例代码。这个压缩包可能包含了一个名为`clob-blob.java`...

    利用spring的jdbcTemplate处理blob、clob

    spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。

    Java实现用Mysql存取图片操作实例

    读取图片时,通过`ResultSet`的`getBinaryStream`方法获取图片数据,然后将其写入文件输出流(`FileOutputStream`)。 在实际开发中,为了提高效率和确保数据完整,建议使用PreparedStatement预编译SQL语句,避免...

    java中读取ORACLE中BLOB字段存储的图片

    ### Java中读取Oracle数据库BLOB字段存储的图片方法详解 #### 一、背景与目的 在实际的应用开发过程中,经常会有将图片等二进制数据存入数据库的需求。Oracle数据库支持通过BLOB(Binary Large Object)类型来存储...

    java,Blob字段操作,将图片或者文件保存到数据库中.zip

    以上就是Java中Blob字段操作的基本流程,通过这些步骤,你可以成功地将图片或文件保存到数据库中,并能从数据库中读取和恢复这些数据。在实际开发中,根据具体需求,可能还需要处理异常、事务管理和资源关闭等问题,...

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    了解BLOB和CLOB的区别以及如何在Oracle中进行插入和查询操作对于数据库开发者和管理员来说至关重要。 首先,我们来看BLOB和CLOB的主要区别: 1. 数据类型:BLOB用于存储二进制大对象,如图片、视频、音频文件或者...

    Java-图片BLOB的存取DEMO

    2、com.ub:实现简单的插入及读取操作,读取后的BLOB可以生成新图片,并使用JFrame方式展现。 3、com.cc: 由于需要将两个不同库(测试代码是同一个库的两个表 IMAGETAB和 IMAGETAB3)的的照片进行更新,表里面存...

    JDBC中操作Blob、Clob等对象 实例详细 非常详细

    本文将详细介绍如何使用JDBC来操作Blob和Clob对象,包括创建含有Blob和Clob字段的表、插入和读取Blob/Clob数据的具体步骤。 #### 二、Derby简介 Apache Derby是一款高质量的、纯Java的嵌入式关系数据库引擎。它...

Global site tag (gtag.js) - Google Analytics