package com.jdbctest.clobtest;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.*;
import com.jdbctest.Util.JDBCUtil;
public class BlobTest {
public static void main(String args[]){
Connection conn = null;
Statement stmt = null;
PreparedStatement ps = null;
ResultSet rs = null;
//获取数据库对象
conn = JDBCUtil.getConnection();
//表存在则删除它
String sql = "DROP TABLE IF EXISTS blobtest";
try {
stmt = conn.createStatement();
System.out.println(sql);
stmt.executeUpdate(sql);
//创建表
sql = "CREATE TABLE blobtest(" +
"b_id INT NOT NULL AUTO_INCREMENT,"+
"b_title VARCHAR(50),"+
"b_text LongBlob,"+
"PRIMARY KEY(b_id)"+
")";
System.out.println(sql);
stmt.executeUpdate(sql);
System.out.println("创建数据表成功!");
sql="INSERT INTO blobtest(b_title,b_text)VALUES(?,?)";
ps = conn.prepareStatement(sql);
//插入图片
//File file = new File("F:\\image\\yahoo.jpg");
File file = new File("d:\\wuyu\\image\\sea.jpg");
InputStream inputStream = new FileInputStream(file);
//BufferedInputStream bis=new BufferedInputStream(inputStream);
//以前的时候直接使用setBinaryStream就可以保存图片,但
//数据库的字符集换成 gbk后就不能用了,一直提示参数类型不匹配,在网上查了一下,
//直接向数据库中存byte可解决
//ps.setString(1, file.getName());
//ps.setBinaryStream(2,inputStream,file.length());
//ps.executeUpdate();
try {
ps.setString(1, file.getName());
//新建一byte数组
byte[] buf=new byte[inputStream.available()];
//将文件读入到byte[]中
inputStream.read(buf);
ps.setBytes(2, buf);
ps.executeUpdate();
System.out.println("插入成功!");
} catch (IOException e1) {
System.out.println("保存图片到数据库成功!");
e1.printStackTrace();
}
//读取数据
sql = "SELECT b_title,b_text FROM blobtest";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
System.out.println("图片名: "+rs.getString("b_title"));
//System.out.println("电影名: "+rs.getString("b_title"));
Blob blob = rs.getBlob("b_text");
File file2 = new File("d:\\wuyu\\sea.jpg");
OutputStream outputStream = new FileOutputStream(file2);
try {
outputStream.write(blob.getBytes(1,(int)blob.length()));
} catch (IOException e) {
e.printStackTrace();
}
//打印出来的为对象
System.out.println("图片内容: "+ blob.getBinaryStream());
}
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
JDBCUtil.close(rs, stmt, conn);
}
}
}
分享到:
相关推荐
在给定的代码中,我们可以看到,使用 FileStream 对象来读取图片文件,并将其转换为字符串。下面是相关的知识点: 1. FileStream 对象:FileStream 是 C# 中的一个类,用于读取和写入文件。它可以用于读取和写入...
在微软云Blob存储的Java开发中,这些jar包包含了必要的API和库,使开发者能够与Azure Blob存储服务进行交互,包括创建、读取、更新和删除Blob对象。 以下是一些关键的Java API和概念,用于微软云Blob存储开发: 1....
# 读取图片并转换为二进制 with Image.open('product_image.jpg') as img: byte_arr = io.BytesIO(img.tobytes()) # 连接数据库并插入数据 conn = pymysql.connect(...) cursor = conn.cursor() cursor....
### Java中读取Oracle数据库BLOB字段存储的图片方法详解 #### 一、背景与目的 在实际的应用开发过程中,经常会有将图片等二进制数据存入数据库的需求。Oracle数据库支持通过BLOB(Binary Large Object)类型来存储...
### Oracle Blob类型转换为文件读取的相关知识点 在软件开发过程中,尤其是在处理数据库中的二进制大对象(Binary Large Object, 简称BLOB)时,经常需要将数据库中的BLOB数据转换为文件进行读取或处理。本文将详细...
在数据库中,`BLOB`(Binary Large Object)类型通常用于存储大量的二进制数据,如图像、音频文件或文档等。而在Java开发过程中,处理这些大数据量的`BLOB`字段是一项挑战性的任务。本文将详细介绍如何在Java中有效...
本文将深入探讨如何在Access数据库中存储和读取图片,并提供一个简单的实现示例。 Access数据库,作为Microsoft Office套件的一部分,是一个功能强大的关系型数据库管理系统(RDBMS),它支持多种数据类型,包括OLE...
- 首先,读取图片或文件的字节流。可以使用`java.io.FileInputStream`来读取本地文件,并通过`FileInputStream.read()`方法获取字节数据。 - 然后,创建`java.sql.Blob`对象,通常数据库连接池提供的`...
Blob(Binary Large Object)字段类型在数据库中用于存储大块二进制数据,如图像、音频文件或任何其他非文本信息。在本场景中,我们将探讨如何在 Delphi 中将二维数组数据转换为 Blob 数据,然后存入 MySQL 数据库,...
下面将详细介绍这两种数据类型以及如何在Oracle中使用它们存储和读取图片。 1. **CLOB数据类型**: `CLOB`数据类型用于存储大量的字符数据,最大可达到4GB。虽然主要用于存储文本,但在本例中,由于图片可以被转换...
在这个特定的案例中,"Delphi将图片以二进制方式存储在数据库BLOB字段中"是一个常见的实践,用于高效、安全地保存图片数据。BLOB(Binary Large Object)字段是数据库系统中用来存储大量二进制数据的类型,非常适合...
c#-操作数据库oracle的小代码,提供用于学习。代码主要实现从oracle读取、保存、上传图片等功能,使用了Oracle.DataAccess.dll,想了解相关知识的欢迎下载,有问题的请给我留言,谢谢。
在IT领域,数据库存储和读取图片是一种常见的需求,特别是在Web应用、文件管理系统或任何需要在后台处理图像的系统中。本篇文章将深入探讨如何在C#环境下利用数据库存储和读取图片,主要关注以下几个方面:数据库...
在Java的持久化框架Hibernate中,BLOB(Binary Large Object)数据类型被用来存储大量二进制数据,如图片、音频、视频或者大型文本文件。本文将深入探讨Hibernate如何读取BLOB类型的数据,以及在实际开发中需要注意...
数据库为Oracle 10g,代码为Visual Studio 2008 VC++开发,软件中的代码有BLOB存储和读取,BFILE存储与读取,FTP上传与下载,以及数据库数据的添加与删除功能。程序已经将数据库的IP,用户名,密码去掉,使用的童鞋把...
在数据库系统中,BLOB(Binary Large Object)是一种用于存储大量二进制数据的数据类型,例如图像、音频或视频文件等。在Oracle数据库中,BLOB类型特别适用于处理大容量的非结构化数据。本文档将详细介绍如何在...
在Java的持久化框架Hibernate中,Blob类型常用于存储大对象(Large Object),如图片、音频、视频或大型文本文件等。本篇文章将深入探讨如何使用Hibernate读取数据库中的Blob字段,以及涉及到的相关知识点。 首先,...
Blob(Binary Large Object)是SQLite3中用于存储二进制大数据类型的一种方式,它可以用来保存图片、音频、视频或者其他任何非文本格式的数据。 在VC6环境下,开发SQLite3的程序通常涉及到以下几个关键知识点: 1....
BLOB是一种用于存储大量二进制数据的数据类型,如图像、音频、视频文件或文档等。在数据库中,BLOB通常用于存储非结构化数据,而PowerBuilder作为一种广泛应用于企业级应用开发的快速应用开发工具,提供了强大的数据...