在java中 查询一个表的 图片字段(blob类型)
判断该图片大小,如果大于100K,那么就把该图片处理成100K
我现在做到获取该图片
但是 处理图片大小遇到了问题
出现错误的地方:src = javax.imageio.ImageIO.read(inputStream);
我的代码如下
package com.hinge.tools;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.hinge.eis.db.DataAccess;
import com.hinge.eis.db.DataAccessOra;
public class ImageDx {
public static void main(String[] args) {
DataAccess dataccess = new DataAccessOra();
Connection conn = dataccess.getConnection();
PreparedStatement ps2 = null;
PreparedStatement stmt = null;
ResultSet rs2 = null;
try {
conn.setAutoCommit(false); // 第一步:插入一个空的CLOB
String sql2 = "select PHOTO,PERSON_ID from hr_person where rownum >=1 and rownum <2order by person_id for update ";
ps2 = conn.prepareStatement(sql2);
stmt = conn.prepareStatement(sql2);
rs2 = ps2.executeQuery();
String personid=null;
stmt =conn.prepareStatement("update hr_person set photo =empty_blob() where person_id =?");
while (rs2.next()) {
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs2.getBlob("PHOTO");
personid = rs2.getString("PERSON_ID");
stmt.setString(1,personid);
stmt.executeUpdate();
stmt.close();
//String content = out.toString();
InputStream input =blob.getBinaryStream();
OutputStream os = blob.getBinaryOutputStream();
BufferedOutputStream output = new BufferedOutputStream(os);
float f=100;
String content = processImage(input,f);
// 写,向数据库写图片
OutputStream out = null;
int blobsize = (int)content.length();
byte[] blobbytes = new byte[blobsize];
int bytesRead = 0;
out.write(blobbytes, 0, blobsize);
os.close();
out.close();
input.close();
}
stmt.executeBatch();
conn.commit();
if (stmt != null)
stmt.close();
if (rs2 != null)
rs2.close();
if (ps2 != null)
ps2.close();
if (conn != null)
conn.close();
} catch (Exception e) {
try {
conn.rollback();
} catch (Exception ex) {
e.printStackTrace();
}
e.printStackTrace();
}
finally{
try {
if (stmt != null)
stmt.close();
if (rs2 != null)
rs2.close();
if (ps2 != null)
ps2.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private static String processImage(InputStream inputStream, float tagsize) {
try {
java.awt.Image src = null;
if (inputStream == null) {
} else
src = javax.imageio.ImageIO.read(inputStream);
if (src == null)
return null;
// float tagsize = 200;
int old_w = src.getWidth(null); //
int old_h = src.getHeight(null);
int new_w = 0;
int new_h = 0; //
float tempdouble = old_w / tagsize;
if (tempdouble < 1)//
tempdouble = (float) 1.0;
new_w = Math.round(old_w / tempdouble);
new_h = Math.round(old_h / tempdouble);//
BufferedImage tag = new BufferedImage(new_w, new_h,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); //
return tag.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
出现错误的地方:src = javax.imageio.ImageIO.read(inputStream);
分享到:
相关推荐
在Java编程中,Blob(Binary Large Object)是用于存储大量二进制数据的数据类型,常被用在数据库中保存图片、文件等非文本信息。本教程将深入探讨如何使用Java进行Blob字段的操作,以实现将图片或文件保存到数据库...
本示例主要涉及的是如何将图片通过BASE64编码加密后存入数据库的Blob类型字段,并能从数据库中取出这些数据再还原成原始图片。以下是相关知识点的详细说明: 1. **BASE64编码**:BASE64是一种用于将二进制数据转换...
Oracle数据库在存储大对象...总之,批量导出Oracle数据库中的BLOB字段生成图片涉及到了数据库连接、SQL查询、BLOB数据处理和文件I/O等多个技术环节。掌握这些知识点对于管理和维护包含二进制数据的数据库系统至关重要。
在IT领域,尤其是在Java开发与Oracle数据库交互的过程中,处理BLOB(Binary Large Object)类型字段是一项常见且重要的任务。BLOB字段主要用于存储大量的二进制数据,如图像、音频、视频或任何其他非文本格式的数据...
例如,在Oracle数据库中创建一张名为`t_wlsgry`的表,并包含一个`BLOB`类型的字段`zp`用于存储图片数据。 3. **图片数据准备**: - 准备一些图片文件,并将其插入到数据库表中。这可以通过SQL语句或者使用Java程序...
可以从数据库中读取blob字段并插入到另一个表中,已经测试通过
kettle通过java代码将数据库blob 字段抽取到本地文件
以下是一个完整的Java程序示例,用于向SQLite数据库中插入一个文件(作为BLOB类型),然后从中读取并恢复该文件。 ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream...
本教程将深入探讨如何在Java环境下,批量地从MySQL数据库中下载存储在Blob字段中的图片,并将其保存到本地文件系统。 首先,我们需要理解Blob类型。Blob是MySQL中的一个数据类型,用于存储大量二进制数据。它分为四...
本教程将详细讲解如何批量导出Oracle数据库中的BLOB字段并生成文件,适用于需要定期或一次性处理大量图片或其他BLOB数据的场景。 首先,确保你已经在本地安装了Oracle客户端。Oracle客户端提供了SQL*Plus和其他工具...
MyBatis 提供了对 CLOB 和 BLOB 类型的内置支持,通过将 CLOB 类型映射到 Java 的 String 类型,BLOB 类型映射到 byte[] 类型。 在使用 MyBatis 时,需要在实体类中定义对应的字段类型,例如: ```java public ...
要从数据库读取图片,你需要执行一个SELECT查询,获取Blob对象,然后将其转换回图片文件。 ```java ResultSet rs = stmt.executeQuery("SELECT imageData FROM images WHERE id = ?"); if (rs.next()) { Blob ...
首先,创建一个包含BLOB字段的新表或者更新已有表结构。例如: ```sql CREATE TABLE mysql_photos ( id INT PRIMARY KEY, photo BLOB ); ``` 然后,通过类似的方法,读取本地文件并将其内容插入到MySQL的BLOB...
在这个场景中,我们关注的是如何使用Java Server Pages(JSP)来操作MySQL数据库中的Blob(Binary Large Object)字段,这是一个用于存储大容量二进制数据如图片、文档或音频文件的特殊字段类型。以下是关于这个主题...
示例代码中使用了一个名为`DbConnection`的类来管理数据库连接。 ```java DbConnection conn = new DbConnection(); Connection cc = conn.BlobDbConnection(); ``` 2. **设置事务控制**:为了确保数据的一致性...
- 然后,将图片文件的内容读取到内存中,并通过 JDBC 的 `setBlob` 方法保存到数据库的 BLOB 字段中。 - 图片的上传可以通过 HTML 表单结合 Java Servlet 或其他框架如 Spring MVC 来实现。 - **图片显示**: - ...
例如,可以创建一个`IMAGES`表,包含`ID`(主键)、`IMAGE_CLOB`(CLOB类型)和`IMAGE_BLOB`(BLOB类型)字段。 - **图片转二进制/字符串**:对图片进行读取,如果是使用`CLOB`,需要将图片转换为Base64字符串;...
4. 数据库操作:在数据库层面,我们需要一个支持BLOB类型的表结构来存储图片。SQL语句如`CREATE TABLE images (id INT PRIMARY KEY, imageData BLOB)`会创建一个可以存储图片的表。存储时,使用PreparedStatement将...