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

#ifndef __javax_sql_RowSet__
#define __javax_sql_RowSet__

#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 ResultSetMetaData;
        class SQLWarning;
        class Statement;
        class Time;
        class Timestamp;
    }
  }
  namespace javax
  {
    namespace sql
    {
        class RowSet;
        class RowSetListener;
    }
  }
}

class javax::sql::RowSet : public ::java::lang::Object
{

public:
  virtual ::java::lang::String * getUrl() = 0;
  virtual void setUrl(::java::lang::String *) = 0;
  virtual ::java::lang::String * getDataSourceName() = 0;
  virtual void setDataSourceName(::java::lang::String *) = 0;
  virtual ::java::lang::String * getUsername() = 0;
  virtual void setUsername(::java::lang::String *) = 0;
  virtual ::java::lang::String * getPassword() = 0;
  virtual void setPassword(::java::lang::String *) = 0;
  virtual jint getTransactionIsolation() = 0;
  virtual void setTransactionIsolation(jint) = 0;
  virtual ::java::util::Map * getTypeMap() = 0;
  virtual void setTypeMap(::java::util::Map *) = 0;
  virtual ::java::lang::String * getCommand() = 0;
  virtual void setCommand(::java::lang::String *) = 0;
  virtual jboolean isReadOnly() = 0;
  virtual void setReadOnly(jboolean) = 0;
  virtual jint getMaxFieldSize() = 0;
  virtual void setMaxFieldSize(jint) = 0;
  virtual jint getMaxRows() = 0;
  virtual void setMaxRows(jint) = 0;
  virtual jboolean getEscapeProcessing() = 0;
  virtual void setEscapeProcessing(jboolean) = 0;
  virtual jint getQueryTimeout() = 0;
  virtual void setQueryTimeout(jint) = 0;
  virtual void setType(jint) = 0;
  virtual void setConcurrency(jint) = 0;
  virtual void setNull(jint, jint) = 0;
  virtual void setNull(jint, jint, ::java::lang::String *) = 0;
  virtual void setBoolean(jint, jboolean) = 0;
  virtual void setByte(jint, jbyte) = 0;
  virtual void setShort(jint, jshort) = 0;
  virtual void setInt(jint, jint) = 0;
  virtual void setLong(jint, jlong) = 0;
  virtual void setFloat(jint, jfloat) = 0;
  virtual void setDouble(jint, jdouble) = 0;
  virtual void setBigDecimal(jint, ::java::math::BigDecimal *) = 0;
  virtual void setString(jint, ::java::lang::String *) = 0;
  virtual void setBytes(jint, JArray< jbyte > *) = 0;
  virtual void setDate(jint, ::java::sql::Date *) = 0;
  virtual void setTime(jint, ::java::sql::Time *) = 0;
  virtual void setTimestamp(jint, ::java::sql::Timestamp *) = 0;
  virtual void setAsciiStream(jint, ::java::io::InputStream *, jint) = 0;
  virtual void setBinaryStream(jint, ::java::io::InputStream *, jint) = 0;
  virtual void setCharacterStream(jint, ::java::io::Reader *, jint) = 0;
  virtual void setObject(jint, ::java::lang::Object *, jint, jint) = 0;
  virtual void setObject(jint, ::java::lang::Object *, jint) = 0;
  virtual void setObject(jint, ::java::lang::Object *) = 0;
  virtual void setRef(jint, ::java::sql::Ref *) = 0;
  virtual void setBlob(jint, ::java::sql::Blob *) = 0;
  virtual void setClob(jint, ::java::sql::Clob *) = 0;
  virtual void setArray(jint, ::java::sql::Array *) = 0;
  virtual void setDate(jint, ::java::sql::Date *, ::java::util::Calendar *) = 0;
  virtual void setTime(jint, ::java::sql::Time *, ::java::util::Calendar *) = 0;
  virtual void setTimestamp(jint, ::java::sql::Timestamp *, ::java::util::Calendar *) = 0;
  virtual void clearParameters() = 0;
  virtual void execute() = 0;
  virtual void addRowSetListener(::javax::sql::RowSetListener *) = 0;
  virtual void removeRowSetListener(::javax::sql::RowSetListener *) = 0;
  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 ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __javax_sql_RowSet__
