package oracle.forms.fd;

/*
 * This sample demonstrate basic Lob support.
 */

import java.awt.Image;
import java.awt.Toolkit;
import java.sql.*;
import java.io.*;
import java.util.*;
import oracle.jdbc.*;
import oracle.sql.*;

public class LectureBlob
{
  public static BLOB blobImage = null ;  
  public static boolean  bLog = false ;
  public static String sConn="", sUser="", sPwd="" ;
  public static String sTable="", sColumn="", sLookup="" ;
  
  // read a BLOB column from the database
  public static Image Lecture( int iDentifiant )
       throws Exception
  {
    // Register the Oracle JDBC driver
    DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
    Connection conn = null ;
    String     req = "" ;
    byte[]     buffer = null ;
    int        iLength = 0 ;
    Image      img = null ;

    // Connect to the database
     log("Lecture() : Connect to database") ;
    try {
      conn = DriverManager.getConnection (sConn, sUser, sPwd);
    } catch (Exception e) {
     log( "error connextion database : " + e.toString()) ;
    }

    conn.setAutoCommit (false);

    // Create a Statement
    Statement stmt = conn.createStatement ();

    req  = "select " + sColumn + ", LENGTH(" + sColumn + ") " ;
    req += "from " + sTable + " where " + sLookup + "=" + iDentifiant ;
    log("Lecture() : execute query="+req) ;
    ResultSet rset = stmt.executeQuery ( req );
    while (rset.next ())
    {
      // Get the lob
      blobImage = ((OracleResultSet)rset).getBLOB (1);
      iLength = rset.getInt(2) ;
    }
    // Close all resources
    rset.close();
    stmt.close();

    log("Lecture() : transform the BLOB length="+iLength) ;
    if( iLength > 0 )
    {
      InputStream instream = blobImage.getBinaryStream();
      // Create temporary buffer for read
      buffer = new byte[iLength];
      int length = 0;
      // Fetch data  
      while ((length = instream.read(buffer)) != -1)
      {
        log("Lecture() : Read " + length + " bytes: ");
      }

      // Close input stream
      instream.close();    
      conn.close(); 
      log("Lecture() : createImage()") ;
      img = Toolkit.getDefaultToolkit().createImage(buffer) ;
    }
    return img ;
    
  }


  // read an image to a database BLOB column
  public static void Ecriture( int iDentifiant, FileInputStream fis, int iSize )
       throws Exception
  {
    // Register the Oracle JDBC driver
    DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
    Connection conn = null ;
    String req = "" ;
    byte[] buffer = null ;
    int iLength = 0 ;

    // Connect to the database
    log("Ecriture() : Connect to database") ;
    try {
      conn = DriverManager.getConnection (sConn, sUser, sPwd);
    } catch (Exception e) {
     log( "Ecriture() : error connecting to the database " + e.toString()) ;
    }

    // Create a Statement
    PreparedStatement   pstmt = null ;

    req  = "UPDATE " + sTable + " set " + sColumn + " = ? where " + sLookup + "=" + iDentifiant ;
    log("Ecriture() : execute query="+req) ;

    pstmt = conn.prepareStatement(req) ;
    if( blobImage == null ) 
       pstmt.setBinaryStream( 1, fis, iSize );      
    else
       pstmt.setBlob(1, blobImage);
    pstmt.execute() ;

    // Close all resources
    pstmt.close();
    conn.close(); 
    
  }
  
  public static void log( String sMessage )
  {
    if( bLog) System.out.println( sMessage ) ;
  }    

}
