Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 

Serialize Objects to Oracle Java code example - Click here to copy ->>>

   Can't find what you're looking for? Try our search:

Really working examples categorized by API, package, class. You can compile and run our examples right away! Not from source code for Java projects - only working examples! Copy, compile and run!

Code:

 
// -----------------------------------------------------------------------------
// SerialOracle.java
// -----------------------------------------------------------------------------

/*
 * =============================================================================
 * Copyright (c) 1998-2005 Jeffrey M. Hunter. All rights reserved.
 *
 * All source code and material located at the Internet address of
 * http://www.idevelopment.info is the copyright of Jeffrey M. Hunter, 2005 and
 * is protected under copyright laws of the United States. This source code may
 * not be hosted on any other site without my express, prior, written
 * permission. Application to host any of the material elsewhere can be made by
 * contacting me at jhunter@idevelopment.info.
 *
 * I have made every effort and taken great care in making sure that the source
 * code and other content included on my web site is technically accurate, but I
 * disclaim any and all responsibility for any loss, damage or destruction of
 * data or any other property which may arise from relying on it. I will in no
 * case be liable for any monetary damages arising from such loss, damage or
 * destruction.
 *
 * As with any code, ensure to test this code in a development environment
 * before attempting to run it in production.
 * =============================================================================
 */
 
import java.io.*;
import java.lang.*;
import java.sql.*;
import java.util.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;

/**
 * -----------------------------------------------------------------------------
 *
 * The following class provides an example of how to serialize a Java object
 * to the Oracle database. Use the following SQL statement to create the
 *
 * -----------------------------------------------------------------------------
 *
 *      connect scott/tiger
 *
 *      DROP SEQUENCE java_obj_seq
 *      /
 *     
 *      CREATE SEQUENCE java_obj_seq
 *             INCREMENT BY 1
 *             START WITH 1
 *             NOMAXVALUE
 *             NOCYCLE
 *      /
 *     
 *      DROP TABLE java_objects
 *      /
 *     
 *      CREATE TABLE java_objects (
 *          obj_id_no   NUMBER
 *        , obj_name    VARCHAR2(2000)
 *        , obj_value   BLOB   DEFAULT empty_blob()
 *      )
 *      /
 *
 * -----------------------------------------------------------------------------
 *
 * The following SQL statement can be used to check objects that have been
 * serialized to the database:
 *
 * connect scott/tiger
 *
 * CREATE OR REPLACE FUNCTION readBLOB (p_raw IN BLOB)
 *   RETURN VARCHAR2
 *   AS
 *
 *   l_tmp     LONG     DEFAULT utl_raw.cast_to_varchar2(dbms_lob.substr(p_raw,2000,1));
 *   l_char    CHAR(1);
 *   l_return  LONG;
 *
 * BEGIN
 *   FOR i IN 1 .. length(l_tmp)
 *   LOOP
 *     l_char := substr(l_tmp, i, 1);
 *     IF ( ascii(l_char) BETWEEN 32 and 127) THEN
 *       l_return := l_return || l_char;
 *     ELSE
 *       l_return := l_return || '.';
 *     END IF;
 *   END LOOP;
 *   RETURN l_return;
 * END;
 * /
 *
 *
 *
 * SET PAGESIZE 9000
 *
 * SELECT
 *     obj_id_no obj_id
 *   , DBMS_LOB.getLength(obj_value) obj_length
 *   , readBLOB(obj_value) obj_value
 * FROM java_objects
 * /
 * -----------------------------------------------------------------------------
 * @version 1.0
 * @author  Jeffrey M. Hunter  (jhunter@idevelopment.info)
 * @author  http://www.idevelopment.info
 * -----------------------------------------------------------------------------
 */

class SerialOracle {

    static final String driver_class   = "oracle.jdbc.driver.OracleDriver";
    static final String connectionURL  = "jdbc:oracle:thin:@localhost:1521:CUSTDB";
    static final String userID         = "scott";
    static final String userPassword   = "tiger";
    static final String getSequenceSQL = "SELECT java_obj_seq.nextval FROM dual";
    static final String writeObjSQL    = "BEGIN " +
                                         "  INSERT INTO java_objects(obj_id_no, obj_name, obj_value) " +
                                         "  VALUES (?, ?, empty_blob()) " +
                                         "  RETURN obj_value INTO ?; " +
                                         "END;";
    static final String readObjSQL     = "SELECT obj_value FROM java_objects WHERE obj_id_no = ?";

    /*
     * +--------------------------------------------------+
     * | METHOD: writeObj                                 |
     * +--------------------------------------------------+
     */
    public static long writeObj(Connection conn, Object obj) throws Exception {

        long id = getNextSeqVal(conn);
        String className = obj.getClass().getName();
        CallableStatement stmt = conn.prepareCall(writeObjSQL);
        stmt.setLong(1, id);
        stmt.setString(2, className);
        stmt.registerOutParameter(3, java.sql.Types.BLOB);
        stmt.executeUpdate();
        BLOB blob = (BLOB) stmt.getBlob(3);
        OutputStream os = blob.getBinaryOutputStream();
        ObjectOutputStream oop = new ObjectOutputStream(os);
        oop.writeObject(obj);
        oop.flush();
        oop.close();
        os.close();
        stmt.close();
        System.out.println("Done serializing: " + className);
        return id;

    }


    /*
     * +--------------------------------------------------+
     * | METHOD: readObj                                  |
     * +--------------------------------------------------+
     */
    public static Object readObj(Connection conn, long id) throws Exception {

        PreparedStatement stmt = conn.prepareStatement(readObjSQL);
        stmt.setLong(1, id);
        ResultSet rs = stmt.executeQuery();
        rs.next();
        InputStream is = rs.getBlob(1).getBinaryStream();
        ObjectInputStream oip = new ObjectInputStream(is);
        Object obj = oip.readObject();
        String className = obj.getClass().getName();
        oip.close();
        is.close();
        stmt.close();
        System.out.println("Done de-serializing: " + className);
        return obj;

    }


    /*
     * +--------------------------------------------------+
     * | METHOD: getNextSeqVal                            |
     * +--------------------------------------------------+
     */
    private static long getNextSeqVal (Connection conn) throws SQLException {

        Statement stmt = conn.createStatement();
        ResultSet rs   = stmt.executeQuery(getSequenceSQL);
        rs.next();
        long id = rs.getLong(1);
        rs.close();
        stmt.close();
        return id;

    }


    /*
     * +--------------------------------------------------+
     * | METHOD: main                                     |
     * +--------------------------------------------------+
     */
    public static void main (String args[]) throws SQLException {

        Connection conn = null;
        Statement stmt = null;
        ResultSet rset = null;
        int insertResults;
        int deleteResults;

        try {

            /*
             * LOAD AND REGISTER THE JDBC DRIVER
             * There are two basic ways to handle this:
             *   - DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
             *   - Class.forName ("oracle.jdbc.driver.OracleDriver").newInstance();
             */
            System.out.print("\n");
            System.out.print("Loading JDBC Driver  -> " + driver_class + "\n");
            Class.forName (driver_class).newInstance();

            /*
             * CONNECT TO THE DATABASE
             */
            System.out.print("Connecting to        -> " + connectionURL + "\n");
            conn = DriverManager.getConnection(connectionURL, userID, userPassword);
            System.out.print("Connected as         -> " + userID + "\n\n");

            /*
             * TURN OFF AutoCommit
             */
            conn.setAutoCommit(false);

            LinkedList obj = new LinkedList();
            obj.add("This is a test");
            obj.add(new Long(123456789));
            obj.add(new java.util.Date());

            long obj_id_no = writeObj(conn, obj);
            conn.commit();

            System.out.print("Serialized OBJECT_ID => " + obj_id_no + "\n\n");

            System.out.print("OBJECT VALUES  => " + readObj(conn, obj_id_no) + "\n\n");
            conn.close();

        } catch (Exception e) {

            e.printStackTrace();
           
        } finally {
       
            if (conn != null) {
                try {
                    System.out.print("Closing down all connections...\n\n");
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}


 
 



References.

The list of classes which were used on this page you can find below. The links to Java API contain official SUN documentation about all used classes.




[ Go Back ]



Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy