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

#ifndef __java_sql_CallableStatement__
#define __java_sql_CallableStatement__

#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 CallableStatement;
        class Clob;
        class Connection;
        class Date;
        class ParameterMetaData;
        class Ref;
        class ResultSet;
        class ResultSetMetaData;
        class SQLWarning;
        class Time;
        class Timestamp;
    }
  }
}

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

public:
  virtual void registerOutParameter(jint, jint) = 0;
  virtual void registerOutParameter(jint, jint, jint) = 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::lang::Object * getObject(jint) = 0;
  virtual ::java::math::BigDecimal * getBigDecimal(jint) = 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::sql::Date * getDate(jint, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Time * getTime(jint, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Timestamp * getTimestamp(jint, ::java::util::Calendar *) = 0;
  virtual void registerOutParameter(jint, jint, ::java::lang::String *) = 0;
  virtual void registerOutParameter(::java::lang::String *, jint) = 0;
  virtual void registerOutParameter(::java::lang::String *, jint, jint) = 0;
  virtual void registerOutParameter(::java::lang::String *, jint, ::java::lang::String *) = 0;
  virtual ::java::net::URL * getURL(jint) = 0;
  virtual void setURL(::java::lang::String *, ::java::net::URL *) = 0;
  virtual void setNull(::java::lang::String *, jint) = 0;
  virtual void setBoolean(::java::lang::String *, jboolean) = 0;
  virtual void setByte(::java::lang::String *, jbyte) = 0;
  virtual void setShort(::java::lang::String *, jshort) = 0;
  virtual void setInt(::java::lang::String *, jint) = 0;
  virtual void setLong(::java::lang::String *, jlong) = 0;
  virtual void setFloat(::java::lang::String *, jfloat) = 0;
  virtual void setDouble(::java::lang::String *, jdouble) = 0;
  virtual void setBigDecimal(::java::lang::String *, ::java::math::BigDecimal *) = 0;
  virtual void setString(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void setBytes(::java::lang::String *, JArray< jbyte > *) = 0;
  virtual void setDate(::java::lang::String *, ::java::sql::Date *) = 0;
  virtual void setTime(::java::lang::String *, ::java::sql::Time *) = 0;
  virtual void setTimestamp(::java::lang::String *, ::java::sql::Timestamp *) = 0;
  virtual void setAsciiStream(::java::lang::String *, ::java::io::InputStream *, jint) = 0;
  virtual void setBinaryStream(::java::lang::String *, ::java::io::InputStream *, jint) = 0;
  virtual void setObject(::java::lang::String *, ::java::lang::Object *, jint, jint) = 0;
  virtual void setObject(::java::lang::String *, ::java::lang::Object *, jint) = 0;
  virtual void setObject(::java::lang::String *, ::java::lang::Object *) = 0;
  virtual void setCharacterStream(::java::lang::String *, ::java::io::Reader *, jint) = 0;
  virtual void setDate(::java::lang::String *, ::java::sql::Date *, ::java::util::Calendar *) = 0;
  virtual void setTime(::java::lang::String *, ::java::sql::Time *, ::java::util::Calendar *) = 0;
  virtual void setTimestamp(::java::lang::String *, ::java::sql::Timestamp *, ::java::util::Calendar *) = 0;
  virtual void setNull(::java::lang::String *, jint, ::java::lang::String *) = 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 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::lang::Object * getObject(::java::lang::String *) = 0;
  virtual ::java::math::BigDecimal * getBigDecimal(::java::lang::String *) = 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(::java::lang::String *, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Time * getTime(::java::lang::String *, ::java::util::Calendar *) = 0;
  virtual ::java::sql::Timestamp * getTimestamp(::java::lang::String *, ::java::util::Calendar *) = 0;
  virtual ::java::net::URL * getURL(::java::lang::String *) = 0;
  virtual ::java::sql::ResultSet * executeQuery() = 0;
  virtual jint executeUpdate() = 0;
  virtual void setNull(jint, jint) = 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 setUnicodeStream(jint, ::java::io::InputStream *, jint) = 0;
  virtual void setBinaryStream(jint, ::java::io::InputStream *, jint) = 0;
  virtual void clearParameters() = 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 jboolean execute() = 0;
  virtual void addBatch() = 0;
  virtual void setCharacterStream(jint, ::java::io::Reader *, jint) = 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 ::java::sql::ResultSetMetaData * getMetaData() = 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 setNull(jint, jint, ::java::lang::String *) = 0;
  virtual void setURL(jint, ::java::net::URL *) = 0;
  virtual ::java::sql::ParameterMetaData * getParameterMetaData() = 0;
  virtual ::java::sql::ResultSet * executeQuery(::java::lang::String *) = 0;
  virtual jint executeUpdate(::java::lang::String *) = 0;
  virtual void close() = 0;
  virtual jint getMaxFieldSize() = 0;
  virtual void setMaxFieldSize(jint) = 0;
  virtual jint getMaxRows() = 0;
  virtual void setMaxRows(jint) = 0;
  virtual void setEscapeProcessing(jboolean) = 0;
  virtual jint getQueryTimeout() = 0;
  virtual void setQueryTimeout(jint) = 0;
  virtual void cancel() = 0;
  virtual ::java::sql::SQLWarning * getWarnings() = 0;
  virtual void clearWarnings() = 0;
  virtual void setCursorName(::java::lang::String *) = 0;
  virtual jboolean execute(::java::lang::String *) = 0;
  virtual ::java::sql::ResultSet * getResultSet() = 0;
  virtual jint getUpdateCount() = 0;
  virtual jboolean getMoreResults() = 0;
  virtual void setFetchDirection(jint) = 0;
  virtual jint getFetchDirection() = 0;
  virtual void setFetchSize(jint) = 0;
  virtual jint getFetchSize() = 0;
  virtual jint getResultSetConcurrency() = 0;
  virtual jint getResultSetType() = 0;
  virtual void addBatch(::java::lang::String *) = 0;
  virtual void clearBatch() = 0;
  virtual JArray< jint > * executeBatch() = 0;
  virtual ::java::sql::Connection * getConnection() = 0;
  virtual jboolean getMoreResults(jint) = 0;
  virtual ::java::sql::ResultSet * getGeneratedKeys() = 0;
  virtual jint executeUpdate(::java::lang::String *, jint) = 0;
  virtual jint executeUpdate(::java::lang::String *, JArray< jint > *) = 0;
  virtual jint executeUpdate(::java::lang::String *, JArray< ::java::lang::String * > *) = 0;
  virtual jboolean execute(::java::lang::String *, jint) = 0;
  virtual jboolean execute(::java::lang::String *, JArray< jint > *) = 0;
  virtual jboolean execute(::java::lang::String *, JArray< ::java::lang::String * > *) = 0;
  virtual jint getResultSetHoldability() = 0;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __java_sql_CallableStatement__
