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

#ifndef __java_sql_Statement__
#define __java_sql_Statement__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace sql
    {
        class Connection;
        class ResultSet;
        class SQLWarning;
        class Statement;
    }
  }
}

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

public:
  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 const jint CLOSE_CURRENT_RESULT = 1;
  static const jint KEEP_CURRENT_RESULT = 2;
  static const jint CLOSE_ALL_RESULTS = 3;
  static const jint SUCCESS_NO_INFO = -2;
  static const jint EXECUTE_FAILED = -3;
  static const jint RETURN_GENERATED_KEYS = 1;
  static const jint NO_GENERATED_KEYS = 2;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __java_sql_Statement__
