
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_sql_ResultSet__
#define __java_sql_ResultSet__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace math
    {
        class BigDecimal;
    }
    namespace net
    {
        class URL;
    }
    namespace sql
    {
        class Array;
        class Blob;
        class Clob;
        class Date;
        class Ref;
        class ResultSet;
        class ResultSetMetaData;
        class SQLWarning;
        class Statement;
        class Time;
        class Timestamp;
    }
  }
}

class java::sql::ResultSet : public ::java::lang::Object
{

public:
  virtual jboolean next() = 0;
  virtual void close() = 0;
  virtual jboolean wasNull() = 0;
  virtual ::java::lang::String * getString(jint) = 0;
  virtual jboolean getBoolean(jint) = 0;
  virtual jbyte getByte(jint) = 0;
  virtual jshort getShort(jint) = 0;
  virtual jint getInt(jint) = 0;
  virtual jlong getLong(jint) = 0;
  virtual jfloat getFloat(jint) = 0;
  virtual jdouble getDouble(jint) = 0;
  virtual ::java::math::BigDecimal * getBigDecimal(jint, jint) = 0;
  virtual JArray< jbyte > * getBytes(jint) = 0;
  virtual ::java::sql::Date * getDate(jint) = 0;
  virtual ::java::sql::Time * getTime(jint) = 0;
  virtual ::java::sql::Timestamp * getTimestamp(jint) = 0;
  virtual ::java::io::InputStream * getAsciiStream(jint) = 0;
  virtual ::java::io::InputStream * getUnicodeStream(jint) = 0;
  virtual ::java::io::InputStream * getBinaryStream(jint) = 0;
  virtual ::java::lang::String * getString(::java::lang::String *) = 0;
  virtual jboolean getBoolean(::java::lang::String *) = 0;
  virtual jbyte getByte(::java::lang::String *) = 0;
  virtual jshort getShort(::java::lang::String *) = 0;
  virtual jint getInt(::java::lang::String *) = 0;
  virtual jlong getLong(::java::lang::String *) = 0;
  virtual jfloat getFloat(::java::lang::String *) = 0;
  virtual jdouble getDouble(::java::lang::String *) = 0;
  virtual ::java::math::BigDecimal * getBigDecimal(::java::lang::String *, jint) = 0;
  virtual JArray< jbyte > * getBytes(::java::lang::String *) = 0;
  virtual ::java::sql::Date * getDate(::java::lang::String *) = 0;
  virtual ::java::sql::Time * getTime(::java::lang::String *) = 0;
  virtual ::java::sql::Timestamp * getTimestamp(::java::lang::String *) = 0;
  virtual ::java::io::InputStream * getAsciiStream(::java::lang::String *) = 0;
  virtual ::java::io::InputStream * getUnicodeStream(::java::lang::String *) = 0;
  virtual ::java::io::InputStream * getBinaryStream(::java::lang::String *) = 0;
  virtual ::java::sql::SQLWarning * getWarnings() = 0;
  virtual void clearWarnings() = 0;
  virtual ::java::lang::String * getCursorName() = 0;
  virtual ::java::sql::ResultSetMetaData * getMetaData() = 0;
  virtual ::java::lang::Object * getObject(jint) = 0;
  virtual ::java::lang::Object * getObject(::java::lang::String *) = 0;
  virtual jint findColumn(::java::lang::String *) = 0;
  virtual ::java::io::Reader * getCharacterStream(jint) = 0;
  virtual ::java::io::Reader * getCharacterStream(::java::lang::String *) = 0;
  virtual ::java::math::BigDecimal * getBigDecimal(jint) = 0;
  virtual ::java::math::BigDecimal * getBigDecimal(::java::lang::String *) = 0;
  virtual jboolean isBeforeFirst() = 0;
  virtual jboolean isAfterLast() = 0;
  virtual jboolean isFirst() = 0;
  virtual jboolean isLast() = 0;
  virtual void beforeFirst() = 0;
  virtual void afterLast() = 0;
  virtual jboolean first() = 0;
  virtual jboolean last() = 0;
  virtual jint getRow() = 0;
  virtual jboolean absolute(jint) = 0;
  virtual jboolean relative(jint) = 0;
  virtual jboolean previous() = 0;
  virtual void setFetchDirection(jint) = 0;
  virtual jint getFetchDirection() = 0;
  virtual void setFetchSize(jint) = 0;
  virtual jint getFetchSize() = 0;
  virtual jint getType() = 0;
  virtual jint getConcurrency() = 0;
  virtual jboolean rowUpdated() = 0;
  virtual jboolean rowInserted() = 0;
  virtual jboolean rowDeleted() = 0;
  virtual void updateNull(jint) = 0;
  virtual void updateBoolean(jint, jboolean) = 0;
  virtual void updateByte(jint, jbyte) = 0;
  virtual void updateShort(jint, jshort) = 0;
  virtual void updateInt(jint, jint) = 0;
  virtual void updateLong(jint, jlong) = 0;
  virtual void updateFloat(jint, jfloat) = 0;
  virtual void updateDouble(jint, jdouble) = 0;
  virtual void updateBigDecimal(jint, ::java::math::BigDecimal *) = 0;
  virtual void updateString(jint, ::java::lang::String *) = 0;
  virtual void updateBytes(jint, JArray< jbyte > *) = 0;
  virtual void updateDate(jint, ::java::sql::Date *) = 0;
  virtual void updateTime(jint, ::java::sql::Time *) = 0;
  virtual void updateTimestamp(jint, ::java::sql::Timestamp *) = 0;
  virtual void updateAsciiStream(jint, ::java::io::InputStream *, jint) = 0;
  virtual void updateBinaryStream(jint, ::java::io::InputStream *, jint) = 0;
  virtual void updateCharacterStream(jint, ::java::io::Reader *, jint) = 0;
  virtual void updateObject(jint, ::java::lang::Object *, jint) = 0;
  virtual void updateObject(jint, ::java::lang::Object *) = 0;
  virtual void updateNull(::java::lang::String *) = 0;
  virtual void updateBoolean(::java::lang::String *, jboolean) = 0;
  virtual void updateByte(::java::lang::String *, jbyte) = 0;
  virtual void updateShort(::java::lang::String *, jshort) = 0;
  virtual void updateInt(::java::lang::String *, jint) = 0;
  virtual void updateLong(::java::lang::String *, jlong) = 0;
  virtual void updateFloat(::java::lang::String *, jfloat) = 0;
  virtual void updateDouble(::java::lang::String *, jdouble) = 0;
  virtual void updateBigDecimal(::java::lang::String *, ::java::math::BigDecimal *) = 0;
  virtual void updateString(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void updateBytes(::java::lang::String *, JArray< jbyte > *) = 0;
  virtual void updateDate(::java::lang::String *, ::java::sql::Date *) = 0;
  virtual void updateTime(::java::lang::String *, ::java::sql::Time *) = 0;
  virtual void updateTimestamp(::java::lang::String *, ::java::sql::Timestamp *) = 0;
  virtual void updateAsciiStream(::java::lang::String *, ::java::io::InputStream *, jint) = 0;
  virtual void updateBinaryStream(::java::lang::String *, ::java::io::InputStream *, jint) = 0;
  virtual void updateCharacterStream(::java::lang::String *, ::java::io::Reader *, jint) = 0;
  virtual void updateObject(::java::lang::String *, ::java::lang::Object *, jint) = 0;
  virtual void updateObject(::java::lang::String *, ::java::lang::Object *) = 0;
  virtual void insertRow() = 0;
  virtual void updateRow() = 0;
  virtual void deleteRow() = 0;
  virtual void refreshRow() = 0;
  virtual void cancelRowUpdates() = 0;
  virtual void moveToInsertRow() = 0;
  virtual void moveToCurrentRow() = 0;
  virtual ::java::sql::Statement * getStatement() = 0;
  virtual ::java::lang::Object * getObject(jint, ::java::util::Map *) = 0;
  virtual ::java::sql::Ref * getRef(jint) = 0;
  virtual ::java::sql::Blob * getBlob(jint) = 0;
  virtual ::java::sql::Clob * getClob(jint) = 0;
  virtual ::java::sql::Array * getArray(jint) = 0;
  virtual ::java::lang::Object * getObject(::java::lang::String *, ::java::util::Map *) = 0;
  virtual ::java::sql::Ref * getRef(::java::lang::String *) = 0;
  virtual ::java::sql::Blob * getBlob(::java::lang::String *) = 0;
  virtual ::java::sql::Clob * getClob(::java::lang::String *) = 0;
  virtual ::java::sql::Array * getArray(::java::lang::String *) = 0;
  virtual ::java::sql::Date * getDate(jint, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Date * getDate(::java::lang::String *, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Time * getTime(jint, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Time * getTime(::java::lang::String *, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Timestamp * getTimestamp(jint, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Timestamp * getTimestamp(::java::lang::String *, ::java::util::Calendar *) = 0;
  virtual ::java::net::URL * getURL(jint) = 0;
  virtual ::java::net::URL * getURL(::java::lang::String *) = 0;
  virtual void updateRef(jint, ::java::sql::Ref *) = 0;
  virtual void updateRef(::java::lang::String *, ::java::sql::Ref *) = 0;
  virtual void updateBlob(jint, ::java::sql::Blob *) = 0;
  virtual void updateBlob(::java::lang::String *, ::java::sql::Blob *) = 0;
  virtual void updateClob(jint, ::java::sql::Clob *) = 0;
  virtual void updateClob(::java::lang::String *, ::java::sql::Clob *) = 0;
  virtual void updateArray(jint, ::java::sql::Array *) = 0;
  virtual void updateArray(::java::lang::String *, ::java::sql::Array *) = 0;
  static const jint FETCH_FORWARD = 1000;
  static const jint FETCH_REVERSE = 1001;
  static const jint FETCH_UNKNOWN = 1002;
  static const jint TYPE_FORWARD_ONLY = 1003;
  static const jint TYPE_SCROLL_INSENSITIVE = 1004;
  static const jint TYPE_SCROLL_SENSITIVE = 1005;
  static const jint CONCUR_READ_ONLY = 1007;
  static const jint CONCUR_UPDATABLE = 1008;
  static const jint HOLD_CURSORS_OVER_COMMIT = 1;
  static const jint CLOSE_CURSORS_AT_COMMIT = 2;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __java_sql_ResultSet__
