Do you have any thoughts on this?
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.OracleResultSet;
import oracle.sql.BFILE;
import oracle.sql.BLOB;
public class movelr
{
/*
from: </code>
http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:238014476571 <code>
be sure to add Libraries: Oracle JDBC
*/
public static void copyBfile(String p_unique_id)
throws Exception
{
int length;
Connection connRemote =
DriverManager.getConnection("jdbc:oracle:thin:@epenegora03:1526:EDEV",
"ivnet_user","iuseredev");
Connection connGivler =
DriverManager.getConnection("jdbc:default:connection:");
connRemote.setAutoCommit (false);
connGivler.setAutoCommit (false);
System.out.println( "connected..." );
// Create statements
PreparedStatement pstmt =
connRemote.prepareStatement
("select bfile_reference from ivnet_dba.iv_bfile_references " +
"where unique_id = ?");
pstmt.setString(1, p_unique_id );
System.out.println( "prepared statement for iv_bfile_references..." );
PreparedStatement stmtGetSEQ =
connGivler.prepareStatement
("select temp_pdf_id_seq.nextval from dual" );
PreparedStatement insertStmt =
connGivler.prepareStatement
("insert into temp_pdfs ( temp_pdf_id, unique_id, b ) " +
"values ( ?, ?, empty_blob() ) " );
System.out.println
( "prepared statement for BLOB insert..." );
PreparedStatement getStmt =
connGivler.prepareStatement
("select b from temp_pdfs where temp_pdf_id = ? for update");
System.out.println
( "prepared statement for BLOB select/lock..." );
// ResultSet rsetSource = pstmt.executeQuery();
OracleResultSet rsetSource = (OracleResultSet) pstmt.executeQuery();
System.out.println
( "executed statement for iv_bfile_references select..." );
System.out.println( "Move to first record..." );
rsetSource.next();
BFILE bfd = rsetSource.getBFILE(1);
bfd.openFile();
// ORA-22289: cannot perform FILEREAD operation on an unopened file or LOB
// When it was a ResultSet
// InputStream is = rsetSource.getBinaryStream(1);
InputStream is = bfd.getBinaryStream();
System.out.println( "Got BFILE stream...");
ResultSet rsetSEQ = stmtGetSEQ.executeQuery();
rsetSEQ.next();
long longTempPdfId = 0;
longTempPdfId = rsetSEQ.getLong(1);
System.out.println("longTempPdfId=" + longTempPdfId);
// Insert a new row and get select
// back the BLOB column
insertStmt.setLong(1, longTempPdfId);
insertStmt.setString(2, p_unique_id);
insertStmt.executeUpdate();
// get output blob and lock it.
getStmt.setLong(1, longTempPdfId);
OracleResultSet rsetOutput =
(OracleResultSet) getStmt.executeQuery();
rsetOutput.next();
// Warning(83,39): method getBinaryOutputStream() in class
// oracle.sql.BLOB has been deprecated
BLOB oBlob = rsetOutput.getBLOB(1);
OutputStream os = oBlob.getBinaryOutputStream();
System.out.println( "Got BLOB Outputstream..." );
System.out.println( "Moving data from IVNET to LOCAL...");
byte buffer[] = new byte[4096];
while ((length = is.read (buffer,0,4096)) != -1)
{
os.write( buffer, 0, length );
}
is.close();
os.close();
rsetOutput.close();
insertStmt.close();
getStmt.close();
bfd.closeFile(); // new
pstmt.close();
connGivler.commit();
connRemote.close();
connGivler.close();
} // copyBfile
} //
NOTE: the blob getBinaryOutputStream is deprecated.