`
猪↘專屬|华
  • 浏览: 163988 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java poi读取数据库中的图片,再把图片放入excel中

    博客分类:
  • java
 
阅读更多

package com.ufun;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.imageio.ImageIO;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.mysql.jdbc.Blob;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;

public class Main {

 static String dbURL = "jdbc:mysql://218.213.98.132:1433/texas_cn_log";
 static String userID = "texas";
 static String passwd = "texas123";

 public static void main(String args[]) {

  try {
   Class.forName("com.mysql.jdbc.Driver");
   Connection conn = (Connection) DriverManager.getConnection(dbURL,
     userID, passwd);
   // conn.setAutoCommit(false);

   
   
   String sql2 = "SELECT id,uid,content,image ,submitTime,readStatus from feedback limit 200,300 ";
   PreparedStatement stmt2 = (PreparedStatement) conn
     .prepareStatement(sql2);
   ResultSet rs = (ResultSet) stmt2.executeQuery();

   int i = 0;
   
   OutputStream outf = new FileOutputStream("E:\\feedback200-300.xls");
   HSSFWorkbook wb = new HSSFWorkbook();
   HSSFSheet sheet = wb.createSheet("feedback数据");
   //只能创造一个这样的对象
   HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
   while (rs.next()) {
    i++;
    HSSFRow row = sheet.createRow(rs.getRow() - 1);
    for (int c = 0; c <= rs.getMetaData().getColumnCount(); c++) {
     HSSFCell cell = row.createCell(c);
     if (c < rs.getMetaData().getColumnCount()) {
      if (c != 3) {
       cell.setCellValue(rs.getString(c + 1));
      } else {
       // InputStream is = rs.getBinaryStream(3);

       if (null != rs.getBlob("image") && !rs.getBlob("image").equals(null)) {
        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
        
        Blob image = (Blob) rs.getBlob("image");
        BufferedImage bufferImg = imgChangeBuffer(image);

        // bufferImg = ImageIO.read(is);
        ImageIO.write(bufferImg, "jpg", byteArrayOut);

        // int dx1, int dy1, int dx2, int dy2, short
        // col1, int row1, short col2, int row2)
        // dx1
        // dy1
        // dx2
        // dy2
        // col1 图片的左上角放在第几个列cell
        // row1图片的左上角放在第几个行cell
        // col2 图片的右下角放在第几个列cell
        // row2图片的右下角放在第几个行cell

        HSSFClientAnchor anchor = new HSSFClientAnchor(
          0, 0, 255, 255, (short) c, i-1,
          (short) c, i-1);
        patriarch.createPicture(anchor, wb.addPicture(
          byteArrayOut.toByteArray(),
          HSSFWorkbook.PICTURE_TYPE_JPEG));
       }

      }
     }

    }

    /*
     * String id = resultSet.getString("id");
     * System.out.println(id); String uid =
     * resultSet.getString("uid"); String content =
     * resultSet.getString("content"); String image =
     * resultSet.getString("image"); //String submitTime =
     * resultSet.getString("submitTime"); //String readStatus =
     * resultSet.getString("readStatus"); File image2 = new
     * File("D:"+File.separator+id+".jpg"); FileOutputStream fos =
     * new FileOutputStream(image2); byte[] buffer = new
     * byte[100000]; InputStream is = resultSet.getBinaryStream(3);
     * while (is.read(buffer) > 0) { fos.write(buffer); }
     * fos.close();
     */
   //}
   //wb.write(outf);
   //outf.close();
   conn.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * @param blob
  * @return
  * @throws IOException
  */
 public static BufferedImage imgChangeBuffer(Blob blob) throws IOException {
  byte[] data = null;
  try {
   InputStream inStream = blob.getBinaryStream();
   long nLen = blob.length();
   int nSize = (int) nLen;
   data = new byte[nSize];
   inStream.read(data);
   inStream.close();
  } catch (SQLException e) {
   e.getMessage();
  }
  BufferedImage bis = ImageIO.read(new ByteArrayInputStream(data));
  return bis;

 }

}

分享到:
评论

相关推荐

    poi excel转换成bean

    标题“poi excel转换成bean”涉及到的关键技术是使用Apache POI从Excel文件中读取数据并将其映射到Java Bean对象中。这个过程在处理大量结构化数据时特别有用,例如导入数据库或进行数据分析。 首先,我们需要理解...

    java版excel解析,并上传至mysql数据库

    9. **Eclipse运行**:在Eclipse中,创建一个Java项目,将jar包添加到项目的类路径中,将上述代码放入`client.java`,然后配置好数据库连接信息,运行这个类即可。 通过这个项目,你不仅可以学习到如何使用Java处理...

    Android开发之读取Excel表格数据

    在Android Studio项目中,我们通常把静态的非代码资源,如图片、音频、文本文件等,放入res目录下的各个子目录。对于Excel文件,我们可以将其放在assets或raw目录下,这两个目录允许我们存放任意类型的文件,且在...

    java将数据导入多个excel并压缩,亲测可用

    - **Apache POI**:Apache POI 是一个流行的开源库,它允许Java程序员读取、写入和修改Microsoft Office格式的文件,包括Excel。使用HSSF(Horrible Spreadsheet Format)处理.xls格式,XSSF处理.xlsx格式。 - **...

    POI操作Excel总结实例

    你可以逐行读取Excel,根据需要将单元格值放入集合中,以便后续处理。 9. **内存优化** 处理大型Excel文件时,POI可能会消耗大量内存。为了避免内存溢出,可以使用SXSSFWorkbook,这是一个低内存占用的API,它会将...

    读取excel自动生成sql文的txt文件

    在IT行业中,自动从Excel文件生成SQL脚本是一项常见的需求,尤其在数据处理、数据库管理以及数据分析等场景中。这个“读取excel自动生成sql文的txt文件”的工具显然是为了解决这一问题而设计的。它允许用户通过Excel...

    poi导入导出excel

    查询结果存储在 `ResultSet` 对象中,我们遍历这个结果集,将每条记录的值放入对应的单元格。 在处理完所有数据后,我们需要将工作簿写入文件。使用 `FileOutputStream` 将 `workbook` 对象写入指定的文件路径。在...

    poi导出数据到excel里

    通常,这个类会有一个静态方法,接收数据集合和输出文件路径作为参数,然后创建工作簿、工作表、行和单元格,将数据填充到Excel中,最后保存文件。为了具体了解`ExcelUtil`的实现细节,你需要查看源代码。如果你遇到...

    excel导入用到jar包

    标题中的"excel导入用到jar包"指的是为了在Java程序中读取和操作Excel文件,我们需要引入特定的库,这里提及的是Apache POI项目提供的JAR文件。 Apache POI是一个流行的开源库,专门用于处理Microsoft Office格式的...

    springMVC poi解析ajax上传excel文件,返回json对象\list数组

    解析通过MutilpartFile导入的Excel并解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,采用Apache的POI的API来操作Excel,读取内容后保存到List中,再将List转Json(使用Linked,增删快...

    SqlServer ,postgresql-8.3-603, mysql,oracle以及将数据导入到excel 的相关jar包

    在实际开发中,开发者通常会把这些JAR包放入项目的类路径(Classpath)中,以便运行时能够找到并加载这些依赖。此外,使用IDE(如Eclipse或IntelliJ IDEA)可以直接管理这些依赖,简化开发过程。 总结来说,SQL ...

    各类数据库连接语法以及jar包

    在Java中,虽然Excel本身不是数据库,但可以使用JDBC-ODBC桥或特定库(如Apache POI)来读取和写入Excel数据。JDBC-ODBC桥需要在系统中配置对应的ODBC数据源。 4. **MySQL**: MySQL是一种广泛使用的开源关系型...

    Excel_To_DB:一款将Excel表格中的数据导入至数据库中的小工具,SpringBoot+EasyPoi+Redis消息队列实现Excel批量异步导入数据库

    【Excel_To_DB】是一款基于Java开发的小型工具,主要用于将Excel表格中的数据高效地导入到数据库中。这个项目采用SpringBoot框架,结合了EasyPoi库处理Excel数据,以及Redis消息队列来实现数据的异步批量导入。下面...

    java实现csv导出千万级数据实例

    本实例提供的解决方案可能是利用流式处理(Streaming)或者迭代器(Iterator)来逐条读取数据库中的数据,然后将每条数据转化为CSV格式并写入文件。这样,内存只需要保持较小的数据量,避免了一次性加载所有数据导致...

    excel转json

    在Java中,可以将Excel表格的每一行映射为一个JSON对象,然后将所有对象放入一个JSON数组中,最终得到一个标准的JSON格式字符串。 4. **文件操作**:工具需要能够读取输入的Excel文件和写入输出的JSON文件。Java的...

    基于JAVA数据可视化设计与实现.zip

    3. **Apache POI**: 虽然POI主要用来处理Microsoft Office格式的文件,但它也可以用于读取和写入CSV数据,这在数据可视化时非常有用,可以将数据导出为Excel表格,便于分析和图表制作。 4. **Java Swing**: Swing是...

Global site tag (gtag.js) - Google Analytics