private bool setLobParameter(Env env, int index, Value value)
        {
            if (_preparedStmt == null)
            {
                return(false);
            }

            try {
                if (value == null || value.isNull())
                {
                    _preparedStmt.setObject(index, null);
                }
                else if (value.isString())
                {
                    _preparedStmt.setBinaryStream(index,
                                                  value.toInputStream(),
                                                  value.length());
                }
                else
                {
                    InputStream inputStream = value.toInputStream();

                    if (inputStream == null)
                    {
                        env.warning(L.l("type {0} ({1}) for parameter index {2} cannot be used for lob",
                                        value.getType(), value.getClass(), index));
                        return(false);
                    }

                    int length = -1;

                    if (value instanceof FileReadValue)
                    {
                        length = (int)((FileReadValue)value).getLength();

                        if (length <= 0)
                        {
                            length = -1;
                        }
                    }

                    if (length < 0)
                    {
                        TempBuffer tempBuffer = TempBuffer.allocate();

                        try {
                            byte[] bytes = new byte[1024];

                            int len;

                            while ((len = inputStream.read(bytes, 0, 1024)) != -1)
                            {
                                tempBuffer.write(bytes, 0, len);
                            }
                        }
                        catch (IOException e) {
                            env.warning(e);
                            return(false);
                        }

                        TempReadStream tempReadStream = new TempReadStream(tempBuffer);
                        tempReadStream.setFreeWhenDone(true);

                        _preparedStmt.setBinaryStream(index,
                                                      new ReadStream(tempReadStream),
                                                      tempBuffer.getLength());
                    }
                    else
                    {
                        _preparedStmt.setBinaryStream(index, inputStream, length);
                    }
                }
            }
            catch (SQLException e) {
                setError(env, e);
                return(false);
            }

            return(true);
        }