Working with Large Objects – BLOB
Sometimes as the part of programming requirement,we have to insert and retrieve large files like images,video files,audio files,resume etc wrt database.
E.g:
upload image in social web sites, upload resume in job related web sites.
To store and retrieve large information we should go for Large Objects(LOBs). There are 2 types of Large Objects.
- Binary Large Object (BLOB)
- Character Large Object (CLOB)
1. Binary Large Object (BLOB)
- A BLOB is a collection of binary data stored as a single entity in the database.
- BLOB type objects can be images,video files,audio files etc..
- BLOB data type can store maximum of “4GB” binary data.
2. Character Large Objects (CLOB)
- A CLOB is a collection of Character data stored as a single entity in the database.
- CLOB can be used to store large text documents(may plain text or xml documents)
- CLOB Type can store maximum of 4GB data.
Steps to insert BLOB type into database
1. create a table in the database which can accept BLOB type data.
create table persons(name varchar2(10),image BLOB);
2. Represent image file in the form of Java File object.
File f = new File("ashok.jpg");
3. Create FileInputStream to read binary data represented by image file.
FileInputStream fis = new FileInputStream(f);
4. Create PreparedStatement with insert query.
PreparedStatement pst = con.prepareStatement("insert into persons values(?,?)");
5. Set values to positional parameters.
pst.setString(1,"ashok");
To set values to BLOB datatype, we can use the following method: setBinaryStream()
- public void setBinaryStream(int index,InputStream is)
- public void setBinaryStream(int index,InputStream is,int length)
- public void setBinaryStream(int index,InputStream is,long length)
E.g:
pst.setBinaryStream(2,fis); ➔ Oracle 11g pst.setBinaryStream(2,fis,(int)f.length()); ➔ Oracle 10g
6. execute sql query
pst.executeUpdate();
import java.sql.*; import java.util.*; import java.text.*; ** * * @author ashok.mariyala * */ public class BlobInsertTest { public static void main(String[] args) throws Exception { Class.forName("oracle.jdbc.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","scott","tiger"); String sqlQuery = "insert into persons values(?,?)"; PreparedStatement pst = con.prepareStatement(sqlQuery); pst.setString(1,"ashok"); File f = new File("ashok.jpg"); FileInputStream fis = new FileInputStream(f); ps.setBinaryStream(2,fis); System.out.println("inserting image from :"+f.getAbsolutePath()); int rowCount = pst.executeUpdate(); if(rowCount == 0) System.out.println("Record Not inserted"); else System.out.println("Record inserted"); con.close(); } }
Retrieving BLOB Type from Database
For retrieving BLOB Type from Database, we can use either simple Statement or PreparedStatement.

Because of Buffer we have to perform only 10 Read Operations & 10 Write Operations.
Steps to Retrieve BLOB type from Database

1. Prepare ResultSet object with BLOB type
ResultSet rs = st.executeQuery("select * from persons");
2. Read Normal data from ResultSet
String name=rs.getString(1);
3. Get InputStream to read binary data from ResultSet.
InputStream is = rs.getBinaryStream(2);
4. Prepare target resource to hold BLOB data by using FileOutputStream
FileOutputStream fos = new FileOutputStream("ashok_db.jpg");
5. Read Binary Data from InputStream and write that Binary data to output Stream.

import java.sql.*; import java.util.*; import java.text.*; ** * * @author ashok.mariyala * */ public class BlobRetriveTest { public static void main(String[] args) throws Exception { Class.forName("oracle.jdbc.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","scott","tiger"); String sqlQuery = "select * from persons"; PreparedStatement pst = con.prepareStatement(sqlQuery); ResultSet rs = pst.executeQuery(); FileOutputStream os = new FileOutputStream("ashok_db.jpeg"); while(rs.next()) { String name = rs.getString(1); InputStream is = rs.getBinaryStream(2); byte[] buffer = new byte[2048]; while(is.read(buffer)>0) { os.write(buffer); } os.flush(); System.out.println("Image is available in :ashok_db.jpeg"); } con.close(); } }