org.postgresql.copy
Class PGCopyOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by org.postgresql.copy.PGCopyOutputStream
All Implemented Interfaces:
java.io.Closeable, java.io.Flushable, CopyIn, CopyOperation

public class PGCopyOutputStream
extends java.io.OutputStream
implements CopyIn

OutputStream for buffered input into a PostgreSQL COPY FROM STDIN operation


Constructor Summary
PGCopyOutputStream(CopyIn op)
          Use given CopyIn operation for writing
PGCopyOutputStream(CopyIn op, int bufferSize)
          Use given CopyIn operation for writing
PGCopyOutputStream(PGConnection connection, java.lang.String sql)
          Uses given connection for specified COPY FROM STDIN operation
PGCopyOutputStream(PGConnection connection, java.lang.String sql, int bufferSize)
          Uses given connection for specified COPY FROM STDIN operation
 
Method Summary
 void cancelCopy()
          Cancels this copy operation, discarding any exchanged data.
 void close()
           
 long endCopy()
          Finishes copy operation succesfully.
 void flush()
           
 void flushCopy()
          Force any buffered output to be sent over the network to the backend.
 int getFieldCount()
           
 int getFieldFormat(int field)
           
 int getFormat()
           
 long getHandledRowCount()
          After succesful end of copy, returns the number of database records handled in that operation.
 boolean isActive()
           
 void write(byte[] buf)
           
 void write(byte[] buf, int off, int siz)
           
 void write(int b)
           
 void writeToCopy(byte[] buf, int off, int siz)
          Writes specified part of given byte array to an open and writable copy operation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PGCopyOutputStream

public PGCopyOutputStream(PGConnection connection,
                          java.lang.String sql)
                   throws java.sql.SQLException
Uses given connection for specified COPY FROM STDIN operation

Parameters:
connection - database connection to use for copying (protocol version 3 required)
sql - COPY FROM STDIN statement
Throws:
java.sql.SQLException - if initializing the operation fails

PGCopyOutputStream

public PGCopyOutputStream(PGConnection connection,
                          java.lang.String sql,
                          int bufferSize)
                   throws java.sql.SQLException
Uses given connection for specified COPY FROM STDIN operation

Parameters:
connection - database connection to use for copying (protocol version 3 required)
sql - COPY FROM STDIN statement
bufferSize - try to send this many bytes at a time
Throws:
java.sql.SQLException - if initializing the operation fails

PGCopyOutputStream

public PGCopyOutputStream(CopyIn op)
Use given CopyIn operation for writing

Parameters:
op - COPY FROM STDIN operation

PGCopyOutputStream

public PGCopyOutputStream(CopyIn op,
                          int bufferSize)
Use given CopyIn operation for writing

Parameters:
op - COPY FROM STDIN operation
bufferSize - try to send this many bytes at a time
Method Detail

write

public void write(int b)
           throws java.io.IOException
Specified by:
write in class java.io.OutputStream
Throws:
java.io.IOException

write

public void write(byte[] buf)
           throws java.io.IOException
Overrides:
write in class java.io.OutputStream
Throws:
java.io.IOException

write

public void write(byte[] buf,
                  int off,
                  int siz)
           throws java.io.IOException
Overrides:
write in class java.io.OutputStream
Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.OutputStream
Throws:
java.io.IOException

flush

public void flush()
           throws java.io.IOException
Specified by:
flush in interface java.io.Flushable
Overrides:
flush in class java.io.OutputStream
Throws:
java.io.IOException

writeToCopy

public void writeToCopy(byte[] buf,
                        int off,
                        int siz)
                 throws java.sql.SQLException
Description copied from interface: CopyIn
Writes specified part of given byte array to an open and writable copy operation.

Specified by:
writeToCopy in interface CopyIn
Parameters:
buf - array of bytes to write
off - offset of first byte to write (normally zero)
siz - number of bytes to write (normally buf.length)
Throws:
java.sql.SQLException - if the operation fails

getFormat

public int getFormat()
Specified by:
getFormat in interface CopyOperation
Returns:
overall format of each row: 0 = textual, 1 = binary

getFieldFormat

public int getFieldFormat(int field)
Specified by:
getFieldFormat in interface CopyOperation
Parameters:
field - number of field (0..fieldCount()-1)
Returns:
format of requested field: 0 = textual, 1 = binary

cancelCopy

public void cancelCopy()
                throws java.sql.SQLException
Description copied from interface: CopyOperation
Cancels this copy operation, discarding any exchanged data.

Specified by:
cancelCopy in interface CopyOperation
Throws:
java.sql.SQLException - if cancelling fails

getFieldCount

public int getFieldCount()
Specified by:
getFieldCount in interface CopyOperation
Returns:
number of fields in each row for this operation

isActive

public boolean isActive()
Specified by:
isActive in interface CopyOperation
Returns:
is connection reserved for this Copy operation?

flushCopy

public void flushCopy()
               throws java.sql.SQLException
Description copied from interface: CopyIn
Force any buffered output to be sent over the network to the backend. In general this is a useless operation as it will get pushed over in due time or when endCopy is called. Some specific modified server versions (Truviso) want this data sooner. If you are unsure if you need to use this method, don't.

Specified by:
flushCopy in interface CopyIn
Throws:
java.sql.SQLException

endCopy

public long endCopy()
             throws java.sql.SQLException
Description copied from interface: CopyIn
Finishes copy operation succesfully.

Specified by:
endCopy in interface CopyIn
Returns:
number of updated rows for server 8.2 or newer (see getHandledRowCount())
Throws:
java.sql.SQLException - if the operation fails.

getHandledRowCount

public long getHandledRowCount()
Description copied from interface: CopyOperation
After succesful end of copy, returns the number of database records handled in that operation. Only implemented in PostgreSQL server version 8.2 and up. Otherwise, returns -1.

Specified by:
getHandledRowCount in interface CopyOperation
Returns:
number of handled rows or -1