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 + -
显示快捷键?