jdbcresultresource.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,364 行 · 第 1/3 页

JAVA
1,364
字号
        String tableName = md.getTableName(fieldOffset + 1);        if (tableName == null || tableName.equals(""))          return BooleanValue.FALSE;        else          return env.createString(tableName);      }    } catch (SQLException e) {      log.log(Level.FINE, e.toString(), e);      return BooleanValue.FALSE;    }  }  /**   * Returns the table corresponding to the field.   *   * @param env the PHP executing environment   * @param fieldOffset the field number   * @return the field table name   */  public Value getFieldSchema(Env env, int fieldOffset)  {    try {      ResultSetMetaData md = getMetaData();            if (md.getColumnCount() <= fieldOffset || fieldOffset < 0) {        env.invalidArgument("schema", fieldOffset);        return BooleanValue.FALSE;      }      else {        String tableName = md.getSchemaName(fieldOffset + 1);        if (tableName == null || tableName.equals(""))          return BooleanValue.FALSE;        else          return env.createString(tableName);      }    } catch (SQLException e) {      log.log(Level.FINE, e.toString(), e);      return BooleanValue.FALSE;    }  }  /**   * Get a StringValue with the column type.   *   * @param env the PHP executing environment   * @param fieldOffset need to add 1 because java is 1 based index and quercus is 0 based   *   * @return a StringValue containing the column type   */  public Value getFieldType(Env env, int fieldOffset)  {    try {      ResultSetMetaData md = getMetaData();      if (md.getColumnCount() <= fieldOffset || fieldOffset < 0) {        env.invalidArgument("field", fieldOffset);        return BooleanValue.FALSE;      }      else {        int jdbcType = md.getColumnType(fieldOffset + 1);        return env.createString(getFieldType(fieldOffset, jdbcType));      }    } catch (Exception e) {      log.log(Level.FINE, e.toString(), e);      return BooleanValue.FALSE;    }  }  /**   * Given the JDBC type of the field at the given offset,   * return a PHP type string.   */  protected String getFieldType(int fieldOffset, int jdbcType)  {    switch (jdbcType) {    case Types.BIGINT:    case Types.BIT:    case Types.INTEGER:    case Types.SMALLINT:    case Types.TINYINT:        return INTEGER;    case Types.LONGVARBINARY:    case Types.LONGVARCHAR:        return BLOB;    case Types.CHAR:    case Types.VARCHAR:    case Types.BINARY:    case Types.VARBINARY:        return STRING;    case Types.TIME:        return TIME;    case Types.DATE:        return DATE;    case Types.TIMESTAMP:        return DATETIME;    case Types.DECIMAL:    case Types.DOUBLE:    case Types.REAL:        return REAL;    default:        return UNKNOWN;    }  }  /**   * Returns the underlying SQL statement   * associated to this result resource.   */  protected Statement getJavaStatement()  {    return _conn.getEnv().getQuercus().getStatement(getStatement());  }  /**   * Get type from Types enumeration   *   * @param fieldOffset the field number (0-based)   * @return the JDBC type   */  protected Value getJdbcType(int fieldOffset)  {    try {      ResultSetMetaData md = getMetaData();      return new LongValue(md.getColumnType(fieldOffset + 1));    } catch (Exception e) {      log.log(Level.FINE, e.toString(), e);      return BooleanValue.FALSE;    }  }  /**   * Returns an ArrayValue column lengths in the most   * recently accessed row. If a fetch function has not   * yet been called this will return BooleanValue.FALSE   *   * @return an ArrayValue of column lengths in the most   * recently accessed row   */  public Value getLengths()  {    Value result;    ArrayValue array = new ArrayValueImpl();    try {      ResultSetMetaData md = getMetaData();      int numColumns = md.getColumnCount();      for (int i = 1; i <= numColumns; i++) {        array.put(new LongValue(_rs.getObject(i).toString().length()));      }      result = array;    } catch (SQLException e) {      log.log(Level.FINE, e.toString(), e);      return BooleanValue.FALSE;    }    return result;  }  /**   * Get the result set meta data.   *   * @return the meta data for this result set   */  public ResultSetMetaData getMetaData()    throws SQLException  {    if (_metaData != null)      return _metaData;    /*    if (_rs != null && ! _isValid) {      if (! _rs.next())	return null;      _isValid = true;    }    */        if (_metaData == null && _rs != null)      _metaData = _rs.getMetaData();    return _metaData;  }  /**   * Returns the number of columns returned in query.   *   * @return the number of columns for this result set   */  public Value getNumFields()  {    try {      Value result = NullValue.NULL;      ResultSetMetaData md = getMetaData();      int count = md.getColumnCount();      if (count != 0) {        result = new LongValue((long) count);      }      return result;    } catch (Exception e) {      log.log(Level.FINE, e.toString(), e);      return NullValue.NULL;    }  }  /**   * Get the number of rows in this result set.   *   * @return the number of rows in this result set   */  public int getNumRows()  {    return getNumRows(_rs);  }  /**   * Returns number of rows returned in query   *   * @param rs a result set   * @return the number of rows in the specified result set   */  public static int getNumRows(ResultSet rs)  {    if (rs == null)      return -1;    try {      int currentRow = rs.getRow();      try {        rs.last();        return rs.getRow();      } catch (Exception e) {        log.log(Level.FINE, e.toString(), e);        return -1;      } finally {        if (currentRow == 0)          rs.beforeFirst();        else          rs.absolute(currentRow);      }    } catch (SQLException e) {      log.log(Level.FINE, e.toString(), e);      return -1;    }  }  /**   * Returns the value at a particular row and column.   *   * @param env the PHP executing environment   * @param row a particular row to get the field value from   * @param field the field name or number   * @return the value of the specified field   */  public Value getResultField(Env env, int row, Value field)  {    try {      ResultSetMetaData md = getMetaData();      int colNumber;      if (field.isNumberConvertible())        colNumber = field.toInt();      else        colNumber = getColumnNumber(field.toString(), md);      if (colNumber < 0 || colNumber >= md.getColumnCount()) {        env.invalidArgument("field", field);        return BooleanValue.FALSE;      }      int currentRow = _rs.getRow();      if ((row < 0) || (!_rs.absolute(row + 1)) || _rs.isAfterLast()) {        if (currentRow > 0)          _rs.absolute(currentRow);        else          _rs.beforeFirst();        env.invalidArgument("row", row);        return BooleanValue.FALSE;      }      return getColumnValue(env, _rs, md, colNumber + 1);    } catch (SQLException e) {      log.log(Level.FINE, e.toString(), e);      return BooleanValue.FALSE;    }  }  /**   * Get the underlying result set.   *   * @return the underlying ResultSet object   */  public ResultSet getResultSet()  {    return _rs;  }  /**   * Get the underlying statement.   *   * @return the underlying Statement object   */  public Statement getStatement()  {    return _stmt;  }  /**   * Seeks to an arbitrary result pointer specified   * by the offset in the result set represented by result.   * Returns TRUE on success or FALSE on failure   *   * @param env the PHP executing environment   * @param rowNumber the row offset   * @return true on success or false on failure   */  public boolean seek(Env env, int rowNumber)  {    if (setRowNumber(rowNumber))      return true;    return false;  }  /**   * Set the number of affected rows to the specified value.   *   * @param affectedRows the new number of affected rows   */  public void setAffectedRows(int affectedRows) {    _affectedRows = affectedRows;  }  /**   * Set a value for field offset. This method will   * return true when the field offset is valid,   * otherwise it will set the field offset   * to the invalid value and return false.   *   * @param fieldOffset PHP is 0-based   */  public boolean setFieldOffset(int fieldOffset)  {    _fieldOffset = fieldOffset;    if (fieldOffset < 0 || fieldOffset >= getNumFields().toInt())      return false;    else      return true;  }  /**   * Points to the row right before "rowNumber".   * Next fetchArray will increment to proper row.   *   * @param rowNumber the row offset   * @return true on success or false on failure   */  public boolean setRowNumber(int rowNumber)  {    return setRowNumber(_rs, rowNumber);  }  /**   * Points to the row right before "rowNumber".   * Next fetchArray will increment to proper row.   *   * @param rs the result set to move the row pointer   * @param rowNumber the row offset   * @return true on success or false on failure   */  public static boolean setRowNumber(ResultSet rs,                                     int rowNumber)  {    // throw error if rowNumber is after last row    int numRows = getNumRows(rs);    if (numRows <= rowNumber || rowNumber < 0) {      return false;    }    try {      if (rowNumber == 0)        rs.beforeFirst();      else        rs.absolute(rowNumber);    } catch (SQLException e) {      log.log(Level.FINE, e.toString(), e);      return false;    }    return true;  }  /**   * Convert this JDBC result resource to a hash code.   *   * @return a hash code of this JDBC result resource   */  public Value toKey()  {    // XXX: phpbb seems to want this?    return _env.createString("JdbcResultResource$" + System.identityHashCode(this));  }  /**   * Returns a string representation for this object.   *   * @return a string representation for this object   */  public String toString()  {    if (_rs != null)      return getClass().getSimpleName() +  "[" + _rs.getClass().getSimpleName() + "]";    else      return getClass().getSimpleName() +  "[]";  }  /**   * Validate this result set and return it.   *   * @return the validated result set   */  public JdbcResultResource validateResult()  {    return this;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?