private boolean 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;
  }
コード例 #2
0
ファイル: SimpleXMLElement.java プロジェクト: dlitz/resin
  protected static Value create(
      Env env,
      QuercusClass cls,
      Value data,
      int options,
      boolean dataIsUrl,
      Value namespaceV,
      boolean isPrefix) {
    if (data.length() == 0) {
      env.warning(L.l("xml data must have length greater than 0"));
      return BooleanValue.FALSE;
    }

    try {
      String namespace = null;

      if (!namespaceV.isNull()) namespace = namespaceV.toString();

      Node node = parse(env, data, options, dataIsUrl, namespace, isPrefix);

      if (node == null) {
        return BooleanValue.FALSE;
      }

      SimpleXMLElement elt = buildNode(env, cls, null, node, namespace, isPrefix);

      return wrapJava(env, cls, elt);

    } catch (IOException e) {
      env.warning(e);

      return BooleanValue.FALSE;
    } catch (ParserConfigurationException e) {
      env.warning(e);

      return BooleanValue.FALSE;
    } catch (SAXException e) {
      env.warning(e);

      return BooleanValue.FALSE;
    }
  }