class JDBC4Statement extends JDBC3Statement implements Statement {
    public JDBC4Statement(SQLiteConnection conn) {
        super(conn);
    }

    // JDBC 4
    public <T> T unwrap(Class<T> iface) throws ClassCastException {
        return iface.cast(this);
    }

    public boolean isWrapperFor(Class<?> iface) {
        return iface.isInstance(this);
    }

    private boolean closed = false;

    @Override
    public void close() throws SQLException {
        super.close();
        closed = true; // isClosed() should only return true when close() happened
    }

    public boolean isClosed() {
        return closed;
    }

    boolean closeOnCompletion;

    public void closeOnCompletion() throws SQLException {
        if (closed) throw new SQLException("statement is closed");
        closeOnCompletion = true;
    }

    public boolean isCloseOnCompletion() throws SQLException {<FILL_FUNCTION_BODY>}

    public void setPoolable(boolean poolable) throws SQLException {
        // TODO Auto-generated method stub

    }

    public boolean isPoolable() throws SQLException {
        // TODO Auto-generated method stub
        return false;
    }
}

        if (closed) throw new SQLException("statement is closed");
        return closeOnCompletion;
    
<methods>public void addBatch(java.lang.String) throws SQLException,public void cancel() throws SQLException,public void clearBatch() throws SQLException,public void clearWarnings() throws SQLException,public void close() throws SQLException,public boolean execute(java.lang.String) throws SQLException,public boolean execute(java.lang.String, int) throws SQLException,public boolean execute(java.lang.String, int[]) throws SQLException,public boolean execute(java.lang.String, java.lang.String[]) throws SQLException,public int[] executeBatch() throws SQLException,public long[] executeLargeBatch() throws SQLException,public long executeLargeUpdate(java.lang.String) throws SQLException,public long executeLargeUpdate(java.lang.String, int) throws SQLException,public long executeLargeUpdate(java.lang.String, int[]) throws SQLException,public long executeLargeUpdate(java.lang.String, java.lang.String[]) throws SQLException,public ResultSet executeQuery(java.lang.String, boolean) throws SQLException,public ResultSet executeQuery(java.lang.String) throws SQLException,public int executeUpdate(java.lang.String) throws SQLException,public int executeUpdate(java.lang.String, int) throws SQLException,public int executeUpdate(java.lang.String, int[]) throws SQLException,public int executeUpdate(java.lang.String, java.lang.String[]) throws SQLException,public Connection getConnection() throws SQLException,public int getFetchDirection() throws SQLException,public int getFetchSize() throws SQLException,public long getLargeMaxRows() throws SQLException,public long getLargeUpdateCount() throws SQLException,public int getMaxFieldSize() throws SQLException,public int getMaxRows() throws SQLException,public boolean getMoreResults() throws SQLException,public boolean getMoreResults(int) throws SQLException,public int getQueryTimeout() throws SQLException,public ResultSet getResultSet() throws SQLException,public int getResultSetConcurrency() throws SQLException,public int getResultSetHoldability() throws SQLException,public int getResultSetType() throws SQLException,public int getUpdateCount() throws SQLException,public SQLWarning getWarnings() throws SQLException,public void setCursorName(java.lang.String) ,public void setEscapeProcessing(boolean) ,public void setFetchDirection(int) throws SQLException,public void setFetchSize(int) throws SQLException,public void setLargeMaxRows(long) throws SQLException,public void setMaxFieldSize(int) throws SQLException,public void setMaxRows(int) throws SQLException,public void setQueryTimeout(int) throws SQLException<variables>protected boolean exhaustedResults,private int queryTimeout,protected long updateCount