The BLOB content can be read using ObjectInputStream of JAVA. This code is useful in reading the content of a BLOB type column of the database and writes its contents to a text file.
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;
public class BlobReader {
/**
* @param args
*/
public static String INITIAL_DETAILS_QUERY = "select VNDR_ERR_REC_ID, REC_CONTENT from EDD.VNDR_ERR_REC WHERE FILE_TYPE = 'URF' AND EDD_CUST_ID = ? ORDER BY EDD_CUST_ID DESC";
private static boolean DEBUG = false;
public static void main(String[] args) {
getInitialDetails(new Integer(args[0]));
System.out.println(args[0]);
}
private static void writeFile(StringBuffer BC) throws IOException{
String file_name = "D:\\Raj\\blobContent.txt";
System.out.println(BC);
BufferedWriter bufwri = new BufferedWriter(new FileWriter(file_name));
int str_len = BC.length();
System.out.println(BC.length());
for (int i = 0; i < str_len; i++) {
bufwri.write(BC.charAt(i));
}
bufwri.close();
}
private static void getInitialDetails(Integer integerEddCustId) {
Connection eddConnection = null;
PreparedStatement eddPstmt = null;
PreparedStatement eddLobPstmt = null;
ResultSet eddResultSet = null;
ResultSet eddLobResultSet = null;
String l_str_lob = null;
System.out.println("Connected to DB");
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
if(DEBUG){
eddConnection = DriverManager.getConnection(
"Connection",
"username",
"password");
}
else {
eddConnection = DriverManager.getConnection(
"Connection",
"Username",
"Password");
}
eddPstmt = eddConnection.prepareStatement(INITIAL_DETAILS_QUERY);
System.out.println(INITIAL_DETAILS_QUERY.replaceAll("\\?",String.valueOf(integerEddCustId)));
eddPstmt.setInt(1, integerEddCustId.intValue());
eddResultSet = eddPstmt.executeQuery();
StringBuffer blCn = new StringBuffer();
ArrayList lst = readLongRaw(eddResultSet);
Iterator itr = lst.iterator();
String tmpp = null;
while(itr.hasNext()) {
tmpp = (String)itr.next();
blCn.append(tmpp);
}
writeFile(blCn);
}
catch (SQLException sqlex) {
sqlex.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(eddPstmt != null) {
try {
eddPstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(eddLobPstmt != null) {
try {
eddLobPstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private static ArrayList readLongRaw(ResultSet rs) throws SQLException, IOException, ClassNotFoundException {
InputStream inputStream = null;
BufferedInputStream bis = null;
ArrayList lst = new ArrayList();
ObjectInputStream ois = null;
while(rs.next()) {
inputStream = rs.getBinaryStream("rec_content");
String tempdata = rs.getString("VNDR_ERR_REC_ID");
try {
ois = new ObjectInputStream(inputStream);
tempdata = tempdata + (String)ois.readObject();
System.out.println("The data for this record::"+tempdata);
}
catch(Exception ex) {
ex.printStackTrace();
}
finally {
if(ois != null) {
ois.close();
}
}
lst.add(tempdata);
if(inputStream != null) {
inputStream.close();
}
}
return lst;
}
}