The sample code to
store the java object [serialised] in to the oracle database as Blob
and reterive the java object back from the blob
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* This class demontrates the code
* how to put an serialised java object in to database as BLOB and
* how to get an serialised java object from database
*
*
* SQL to be executed to create table
CREATE TABLE "SAMPLE"
(
"ID" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"CONTENT" BLOB,
CONSTRAINT "SAMPLE_PK" PRIMARY KEY ("ID") ENABLE
)
*
*/
public class InsertAndFetchJavaObjAsBLOB {
static String userid = "<USER_NAME>"; //user name to connect to database schema
static String password = "<PASSWORD>"; //password to connect to database schema
static String url = "jdbc:oracle:thin:@<IP_ADDRESS>:<PORT>:<SID>"; //connection string specifying IP, port and SID for database
static Connection con = null;
public static void main(String[] args) throws Exception {
boolean insert = true;
if(insert){
insertObjectToBlob(12,"Kevin", 12, 45);
insertObjectToBlob(11,"Kevin", 11, 48);
insertObjectToBlob(10,"Kevin", 10, 38);
insertObjectToBlob(9,"Kevin", 9, 33);
insertObjectToBlob(8,"Kevin", 8, 39);
insertObjectToBlob(7,"Kevin", 7, 29);
insertObjectToBlob(6,"Kevin", 6, 22);
insertObjectToBlob(5,"Kevin", 5, 27);
insertObjectToBlob(4,"Kevin", 4, 28);
insertObjectToBlob(3,"Kevin", 3, 26);
insertObjectToBlob(2,"Kevin", 2, 25);
insertObjectToBlob(1,"Kevin", 1, 26);
}
readObjectFromBlob(1);
readObjectFromBlob(5);
readObjectFromBlob(7);
readObjectFromBlob(10);
readObjectFromBlob(12);
}
/**
* This methos demontrates the code
* how to put an serialised java object in to database as BLOB and
* @param id
* @param name
* @param div
* @param rollNo
*/
public static void insertObjectToBlob(int id, String name, int div, int rollNo) {
System.out.println("Entering methos insertObjectToBlob with param id: "+id+" | name: "+name+" | div: "+div+" | rollNo: "+rollNo);
Connection con = getOracleJDBCConnection();
if (con != null) {
try{
System.out.println("Got Connection.");
DatabaseMetaData meta = con.getMetaData();
System.out.println("Driver Name : " + meta.getDriverName());
System.out.println("Driver Version : " + meta.getDriverVersion());
Statement stmt = con.createStatement();
//create a java object
Student s = new Student(name,div,rollNo);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream objOstream = new ObjectOutputStream(baos);
objOstream.writeObject(s);
objOstream.flush();
objOstream.close();
byte[] bArray = baos.toByteArray();
System.out.println("bArray = " + bArray);
PreparedStatement objStatement = con.prepareStatement("insert into sample(id,content) values (?,?)");
objStatement.setInt(1,id);
//objStatement.setBlob(2, blob );
objStatement.setBytes(2, bArray);
boolean a = objStatement.execute();
System.out.println("Result of Insert: "+a);
stmt.close();
}catch(Exception e){
e.printStackTrace();
}finally{
if(con != null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} else {
System.out.println("Could not Get Connection");
}
System.out.println("Exiting methos insertObjectToBlob.");
}
/**
* This methos demontrates the code
* how to get an serialised java object from database
* @param id
*/
public static void readObjectFromBlob(int id) {
System.out.println("Entering methos readObjectFromBlob with param id: "+id);
Connection connection = null;
PreparedStatement pstmt = null;
System.out.println("Deriver name");
InputStream in = null;
try {
// Load the JDBC driver
/*String driverName = "oracle.jdbc.driver.OracleDriver";
Class.forName(driverName);*/
System.out.println("Hello");
// Create a connection to the database
connection = getOracleJDBCConnection();
System.out.println("Connectin before close :: " + connection);
ResultSet rs = null;
java.sql.Blob rs1 = null;
String queryStr = null;
// queryStr = new String("select * from CPOS_SALE_TRN_INVOICE_DTL");
queryStr = new String(
"select content from SAMPLE where id="+id);
pstmt = connection.prepareStatement(queryStr);
rs = pstmt.executeQuery();
if (null != rs) {
System.out.println("Result set found.");
while (rs.next()) {
System.out.println("Result set found. Inside while.");
rs1 = (Blob) rs.getBlob(1);
System.out.println("rs1: " + rs1);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
in = rs1.getBinaryStream();
System.out.println("in: " + in);
int n = 0;
while ((n = in.read(buf)) >= 0) {
baos.write(buf, 0, n);
}
System.out.println("baos: " + baos);
byte[] bytes = baos.toByteArray();
System.out.println("bytes: " + baos);
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
System.out.println("bis: " + bis);
ObjectInput in1 = new ObjectInputStream(bis);
System.out.println("in1: " + in1);
Object o = in1.readObject();
System.out.println("object : " + o);
if (o != null) {
System.out.println("Object Class: "
+ o.getClass().getName());
System.out.println(((Student)o).getName()+" | "+((Student)o).getStd()+" | "+((Student)o).getRollNo());
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println("Exiting methos readObjectFromBlob.");
}
public static Connection getOracleJDBCConnection() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
try {
con = DriverManager.getConnection(url, userid, password);
} catch (SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}
return con;
}
}