Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Firebird Open Source J2ee connector - jdbc driver
   *
   * Distributable under LGPL license.
   * You may obtain a copy of the License at http://www.gnu.org/copyleft/lgpl.html
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * LGPL License for more details.
  *
  * This file was created by members of the firebird development team.
  * All individual contributions remain the Copyright (C) of those
  * individuals.  Contributors to this file are either listed here or
  * can be obtained from a CVS history command.
  *
  * All rights reserved.
  */
 
 package org.firebirdsql.jdbc.field;
 
 import java.io.Reader;
 import java.sql.Blob;
 import java.sql.Clob;
 
This is Blob-based implementation of FBStringField. It should be used for fields declared in database as BLOB SUB_TYPE 1. This implementation provides all conversion routines FBStringField has.

Author(s):
Roman Rokytskyy
Version:
1.0
 
 public class FBLongVarCharField extends FBStringField implements FBFlushableField{
 
     private static final int BUFF_SIZE = 4096;
     
     private FBBlob blob;
 
     // Rather then hold cached data in the XSQLDAVar we will hold it in here.
     private int length;
     private byte[] bytes;
     private InputStream binaryStream;
     private Reader characterStream;
 
     FBLongVarCharField(XSQLVAR fieldFieldDataProvider dataProviderint requiredType
         throws SQLException 
     {
         super(fielddataProviderrequiredType);
     }
     
     public void close() throws SQLException {
         try {
             if ( != null
                 .close();
         } catch(IOException ioex) {
             throw new FBSQLException(ioex);
         } finally {       
             // forget this blob instance, resource waste
             // but simplifies our life. BLOB handle will be
             // released by a server automatically later
 
              = null;
             this. = null;
             this. = null;
             this. = null;
             this. = 0;
         }
     }
     
     public Blob getBlob() throws SQLException {
         
         if ( != null)
             return ;
         
         if (getFieldData()==null)
             return ;
 
          = new FBBlob(.decodeLong(getFieldData()));
         return ;
     }
     
     public Clob getClob() throws SQLException {
     	FBBlob blob = (FBBlobgetBlob();
     	
     	if (blob == ){
     		return ;
     	}
     	
     	return new FBClob(blob);
     }
     
    public InputStream getBinaryStream() throws SQLException {
        Blob blob = getBlob();
        if (blob == )
            return ;
        return blob.getBinaryStream();
    }
    
    public byte[] getBytes() throws SQLException {
        Blob blob = getBlob();
        if (blob == )
            return ;
        InputStream in = blob.getBinaryStream();
        if (in == )
            return ;
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        // copy stream data
        byte[] buff = new byte[];
        int counter = 0;
        try {
            while((counter = in.read(buff)) != -1) {
                bout.write(buff, 0, counter);
            }
        } catch(IOException ioex) {
            throw (SQLException)createException(
                 + " " + ioex.getMessage());
        } finally {
            try {
                in.close();
            } catch(IOException ioex) {
                throw new FBSQLException(ioex);
            }
            try {
                bout.close();
            } catch(IOException ioex) {
                throw new FBSQLException(ioex);
            }
        }
        return bout.toByteArray();
    }
    public byte[] getCachedData() throws SQLException {
        if (getFieldData() == null) {
            
            if ( != null)
                return ;
            else
                return ;
        }
          return getBytes();
    }
    
        if (getFieldData() == null
            return new FBFlushableField.CachedObject();
        
        return new CachedObject(getBytes(), nullnull, 0);
    }
    
    public void setCachedObject(FBFlushableField.CachedObject cachedObjectthrows SQLException {
        this. = cachedObject.bytes;
        this. = cachedObject.binaryStream;
        this. = cachedObject.characterStream;
        this. = cachedObject.length;
    }
    public String getString() throws SQLException {
        byte[] data = getBytes();
        
        if (data == )
            return ;
        
        return .decodeString(data);
    }
    public void setBlob(FBBlob blobthrows SQLException {
        setFieldData(.encodeLong(blob.getBlobId()));
        this. = blob;
    }
    
    public void setClob(FBClob clobthrows SQLException {
    	FBBlob blob = clob.getWrappedBlob();
    	setBlob(blob);
    }
    public void setCharacterStream(Reader inint lengththrows SQLException {
        if (in == ) {
            setNull();
            return;
        }
        
        this. = null;
        this. = in;
        this. = null;
        this. = length;
    }
    public void setString(String valuethrows SQLException {
        
        if (value == ) {
            setNull();
            return;
        }
        
    }
    public void setBytes(byte[] valuethrows SQLException {
        if (value == ) {
            setNull();
            return;
        }
        
        this. = null;
        this. = null;
        this. = value;
        this. = value.length;
    }
    public void setBinaryStream(InputStream inint lengththrows SQLException {
        
        if (in == ) {
            setNull();
            return;
        }
            
        this. = in;
        this. = null;
        this. = null;
        this. = length;
    }
    public void flushCachedData() throws SQLException {
        if ( != null)
            copyBinaryStream(this.this.);
        else
        if ( != null)
        else
        if ( != null)
            copyBytes();
        else
        if ( == null)
            setNull();
        
        this. = null;
        this. = null;
        this. = null;
        this. = 0;
    }
    
    private void copyBinaryStream(InputStream inint lengththrows SQLException {
        
        FBBlob blob =  new FBBlob();
        blob.copyStream(inlength);
        setFieldData(.encodeLong(blob.getBlobId()));
    }
    private void copyCharacterStream(Reader inint lengthString encodingthrows SQLException {
        FBBlob blob =  new FBBlob();
        blob.copyCharacterStream(inlengthencoding);
        setFieldData(.encodeLong(blob.getBlobId()));
    }
    
    private void copyBytes(byte[] bytesint lengththrows SQLException {
        FBBlob blob = new FBBlob();
        blob.copyBytes(bytes, 0, length);
        setFieldData(.encodeLong(blob.getBlobId()));
    }
New to GrepCode? Check out our FAQ X