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

#ifndef __java_sql_PreparedStatement__
#define __java_sql_PreparedStatement__

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

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

public:
  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_PreparedStatement__
