code: public ResultSetMetaData getMetaData() throws SQLException {
      checkClose();
      ResultSet rs = getResultSet();
      if (rs != null) {
        return rs.getMetaData();
      }
      if (resultSetMetaData == null) {
        loadParametersData();
      }
      return resultSetMetaData;
    }
docs: Retrieves a <code>ResultSetMetaData</code> object that contains information about the columns
  of the
  <code>ResultSet</code> object that will be returned when this <code>PreparedStatement</code>
  object is executed.
  <br>
  Because a <code>PreparedStatement</code> object is precompiled, it is possible to know about
  the
  <code>ResultSet</code> object that it will return without having to execute it.  Consequently,
  it is possible to invoke the method <code>getMetaData</code> on a
  <code>PreparedStatement</code> object rather than waiting to execute it and then invoking the
  <code>ResultSet.getMetaData</code> method on the <code>ResultSet</code> object that is
  returned.
  
  @return the description of a <code>ResultSet</code> object's columns or <code>null</code> if
  the driver cannot return a <code>ResultSetMetaData</code> object
  @throws SQLException                    if a database access error occurs or this method is
  called on a closed
  <code>PreparedStatement</code>