com.onewebsql.query.adapter
Class SetBlobOp

java.lang.Object
  extended by com.onewebsql.query.adapter.ColumnOp<T>
      extended by com.onewebsql.query.adapter.ColumnBlobOp<Object>
          extended by com.onewebsql.query.adapter.SetBlobOp
All Implemented Interfaces:
ConnectionOp<Object>
Direct Known Subclasses:
DiskBufferingSetBlobOp

public class SetBlobOp
extends ColumnBlobOp<Object>

Operacja zapisująca dane ze strumienia do kolumny typu Blob we wskazanym wierszu. Ze względu na specyfikę implementacji obiektów typu BLOB przez sterowniki JDBC do baz danych, operacja dzieli zapis ze strumienia na dwie paczki (ang. burst). Pierwsza paczka danych zapisywana jest za pomocą metody PreparedStatement.setBinaryStream(int, java.io.InputStream, int), druga zaś za pomocą kopiowania danych do strumienia pobranego metodą Blob.setBinaryStream(long). W przypadku próby zapisu nielimitowanego (podanie wartości -1 parametru length konstruktora) operacja stara się zapisać dane w sposób najbardziej zgodny z API JDBC. Nie wszystkie jednak sterowniki JDBC potrafią obsłużyć zapisy nielimitowane (tj. sygnalizują błąd podczas próby zapisu za pomocą pierwszej paczki mniejszej ilości bajtów niż firstBurstSize). Wtedy należy użyć operacji DiskBufferingSetBlobOp, która buforuje dane przed zapisem do kolumny typu Blob.

See Also:
DiskBufferingSetBlobOp

Field Summary
static int DEFAULT_FIRST_BURST_SIZE
          Domyślna wielkość pierwszej paczki bajtów zapisywanych do kolumny typu Blob.
protected  int firstBurstSize
          Wielkość pierwszej paczki bajtów zapisywanych do kolumny typu Blob.
protected  InputStream is
          Strumień wejściowy, z którego pobierane są dane do zapisania w kolumnie typu Blob.
 
Fields inherited from class com.onewebsql.query.adapter.ColumnBlobOp
SINGLE_BLOB_ROW_HANDLER
 
Fields inherited from class com.onewebsql.query.adapter.ColumnOp
column, dbAdapter, length, rowId, schemaName
 
Constructor Summary
SetBlobOp(DBAdapter dbAdapter, String schemaName, Column column, LExp rowId, InputStream is, long length)
          Konstruktor.
SetBlobOp(DBAdapter dbAdapter, String schemaName, Column column, LExp rowId, InputStream is, long length, int firstBurstSize)
          Konstruktor.
 
Method Summary
 Object invoke(Connection connection)
          Invokes the operation.
protected  boolean isAtEndOfStream(PushbackInputStream pushbackInputStream)
          Metoda sprawdza czy strumień jest już wyczerpany.
protected  void writeFirstBurst(Connection connection, InputStream inputStream)
          Zapisuje pierwszą paczkę danych z podanego strumienia wejściowego do kolumny typu Blob.
protected  void writeSecondBurst(Connection connection, InputStream inputStream, long bytesWritten)
          Zapisuje drugą paczkę danych z podanego strumienia wejściowego do kolumny typu Blob.
 
Methods inherited from class com.onewebsql.query.adapter.ColumnBlobOp
getColumnBlob
 
Methods inherited from class com.onewebsql.query.adapter.ColumnOp
getColumnDebugName, getColumnObject, setColumnValueToNull
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_FIRST_BURST_SIZE

public static final int DEFAULT_FIRST_BURST_SIZE
Domyślna wielkość pierwszej paczki bajtów zapisywanych do kolumny typu Blob.

See Also:
Constant Field Values

is

protected InputStream is
Strumień wejściowy, z którego pobierane są dane do zapisania w kolumnie typu Blob.


firstBurstSize

protected int firstBurstSize
Wielkość pierwszej paczki bajtów zapisywanych do kolumny typu Blob.

Constructor Detail

SetBlobOp

public SetBlobOp(DBAdapter dbAdapter,
                 String schemaName,
                 Column column,
                 LExp rowId,
                 InputStream is,
                 long length)
Konstruktor. Jego wywołanie jest równoważne wywołaniu SetBlobOp(dbAdapter, column, rowId, is, length, DEFAULT_FIRST_BURST_SIZE).

Parameters:
dbAdapter - adapter bazy danych.
schemaName - nazwa schematu w którym tabela
column - kolumna do której będą zapisywane dane.
rowId - identyfikator wiersza tabeli, do którego będą zapisywane dane.
is - strumień wejściowy zawierający dane do zapisania.
length - ilość bajtów do zapisu. Jeżeli podana zostanie wartość -1 operacja spróbuje zapisać wszystkie dane ze strumienia wejściowego (o ile pozwoli na to sterownik JDBC).

SetBlobOp

public SetBlobOp(DBAdapter dbAdapter,
                 String schemaName,
                 Column column,
                 LExp rowId,
                 InputStream is,
                 long length,
                 int firstBurstSize)
Konstruktor.

Parameters:
dbAdapter - adapter bazy danych.
schemaName - nazwa schematu w którym tabela
column - kolumna do której będą zapisywane dane.
rowId - identyfikator wiersza tabeli, do którego będą zapisywane dane.
is - strumień wejściowy zawierający dane do zapisania.
length - ilość bajtów do zapisu. Jeżeli podana zostanie wartość -1 operacja spróbuje zapisać wszystkie dane ze strumienia wejściowego (o ile pozwoli na to sterownik JDBC).
firstBurstSize - rozmiar pierwszej paczki do zapisu w bajtach.
Method Detail

isAtEndOfStream

protected boolean isAtEndOfStream(PushbackInputStream pushbackInputStream)
                           throws IOException
Metoda sprawdza czy strumień jest już wyczerpany.

Parameters:
pushbackInputStream - strumień wejściowy.
Returns:
true jeżeli strumień wejściowy jest już wyczerpany, false w przeciwnym wypadku.
Throws:
IOException - jeżeli wystąpił błąd podczas operacji na strumieniu wejściowym.

writeFirstBurst

protected void writeFirstBurst(Connection connection,
                               InputStream inputStream)
                        throws SQLException
Zapisuje pierwszą paczkę danych z podanego strumienia wejściowego do kolumny typu Blob.

Parameters:
connection - połączenie JDBC do bazy danych.
inputStream - strumień wejściowy, z którego odczytywane są bajty do zapisu w kolumnie typu Blob.
Throws:
SQLException - jeżeli wystąpił błąd podczas operacji na bazie danych.

writeSecondBurst

protected void writeSecondBurst(Connection connection,
                                InputStream inputStream,
                                long bytesWritten)
                         throws SQLException
Zapisuje drugą paczkę danych z podanego strumienia wejściowego do kolumny typu Blob.

Parameters:
connection - połączenie JDBC do bazy danych.
inputStream - strumień wejściowy, z którego odczytywane są bajty do zapisania w kolumnie typu Blob.
bytesWritten - ilość bajtów zapisanych w pierwszej paczce.
Throws:
SQLException - jeżeli wystąpił błąd podczas operacji na bazie danych.

invoke

public Object invoke(Connection connection)
              throws SQLException
Description copied from interface: ConnectionOp
Invokes the operation.

Parameters:
connection - database connection
Returns:
result of the operation
Throws:
SQLException - if an exception is thrown


Copyright © 2011-2013 e-point SA. All Rights Reserved.