class JDBC4Connection extends JDBC3Connection {

    public JDBC4Connection(String url, String fileName, Properties prop) throws SQLException {
        super(url, fileName, prop);
    }

    public Statement createStatement(int rst, int rsc, int rsh) throws SQLException {
        checkOpen();
        checkCursor(rst, rsc, rsh);

        return new JDBC4Statement(this);
    }

    public PreparedStatement prepareStatement(String sql, int rst, int rsc, int rsh)
            throws SQLException {
        checkOpen();
        checkCursor(rst, rsc, rsh);

        return new JDBC4PreparedStatement(this, sql);
    }

    // JDBC 4
    /** @see java.sql.Connection#isClosed() */
    public boolean isClosed() throws SQLException {
        return super.isClosed();
    }

    public <T> T unwrap(Class<T> iface) throws ClassCastException {<FILL_FUNCTION_BODY>}

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

    public Clob createClob() throws SQLException {
        // TODO Support this
        throw new SQLFeatureNotSupportedException();
    }

    public Blob createBlob() throws SQLException {
        // TODO Support this
        throw new SQLFeatureNotSupportedException();
    }

    public NClob createNClob() throws SQLException {
        // TODO Support this
        throw new SQLFeatureNotSupportedException();
    }

    public SQLXML createSQLXML() throws SQLException {
        // TODO Support this
        throw new SQLFeatureNotSupportedException();
    }

    public boolean isValid(int timeout) throws SQLException {
        if (isClosed()) {
            return false;
        }
        Statement statement = createStatement();
        try {
            return statement.execute("select 1");
        } finally {
            statement.close();
        }
    }

    public void setClientInfo(String name, String value) throws SQLClientInfoException {
        // TODO Auto-generated method stub

    }

    public void setClientInfo(Properties properties) throws SQLClientInfoException {
        // TODO Auto-generated method stub

    }

    public String getClientInfo(String name) throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }

    public Properties getClientInfo() throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }

    public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
}

        // caller should invoke isWrapperFor prior to unwrap
        return iface.cast(this);
    
<methods>public void clearWarnings() throws SQLException,public Statement createStatement() throws SQLException,public Statement createStatement(int, int) throws SQLException,public abstract Statement createStatement(int, int, int) throws SQLException,public Struct createStruct(java.lang.String, java.lang.Object[]) throws SQLException,public java.lang.String getCatalog() throws SQLException,public int getHoldability() throws SQLException,public Map<java.lang.String,Class<?>> getTypeMap() throws SQLException,public SQLWarning getWarnings() throws SQLException,public boolean isReadOnly() ,public java.lang.String nativeSQL(java.lang.String) ,public CallableStatement prepareCall(java.lang.String) throws SQLException,public CallableStatement prepareCall(java.lang.String, int, int) throws SQLException,public CallableStatement prepareCall(java.lang.String, int, int, int) throws SQLException,public PreparedStatement prepareStatement(java.lang.String) throws SQLException,public PreparedStatement prepareStatement(java.lang.String, int) throws SQLException,public PreparedStatement prepareStatement(java.lang.String, int[]) throws SQLException,public PreparedStatement prepareStatement(java.lang.String, java.lang.String[]) throws SQLException,public PreparedStatement prepareStatement(java.lang.String, int, int) throws SQLException,public abstract PreparedStatement prepareStatement(java.lang.String, int, int, int) throws SQLException,public void releaseSavepoint(Savepoint) throws SQLException,public void rollback(Savepoint) throws SQLException,public void setCatalog(java.lang.String) throws SQLException,public void setHoldability(int) throws SQLException,public void setReadOnly(boolean) throws SQLException,public Savepoint setSavepoint() throws SQLException,public Savepoint setSavepoint(java.lang.String) throws SQLException,public void setTypeMap(Map#RAW) throws SQLException,public void tryEnforceTransactionMode() throws SQLException<variables>private boolean readOnly,private final java.util.concurrent.atomic.AtomicInteger savePoint,private Map<java.lang.String,Class<?>> typeMap