BLOB

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.

  1. Binary Large Object (BLOB)
  2. 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.

Capture 28

Because of Buffer we have to perform only 10 Read Operations & 10 Write Operations.

Steps to Retrieve BLOB type from Database
Capture 29

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.

Capture 30
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();
   }
}
BLOB
Scroll to top