410013796724260
• Webmoney
R335386147728
Z369087728698
Чтение метаданныхJDBC включает два интерфейса (DatabaseMetaData, ResultSetMetaData) для получения дополнительной информации MetaData о параметрах подключения к серверу БД, самой базе данных и результирующему набору, извлекаемому из базы данных. Интерфейс DatabaseMetaDataМетод getMetaData текущего подключения Connection возвращает объект DatabaseMetaData. public DatabaseMetaData getMetaData() throws SQLException DatabaseMetaData входит в состав пакета java.sql.* и содержит методы, описывающие таблицы базы данных, поддержку SQL, хранимые процедуры и другие сведения, относящиеся к базе данных и текущему Connection, которые не относятся непосредственно к выполнению команд и извлечению результирующих наборов. Типы всех столбцов таблицы БД можно получить с помощью метода getColumns класса DatabaseMetaData : public abstract ResultSet getColumns (String catalog, String schema, String table, String columnPattern) throws SQLException Методу getColumns необходимо передать четыре параметра: наименование каталога, наименование схемы, наименование таблицы и наименование столбца. В следующем коде из базы данных извлекаются метаданные колонок таблицы : DatabaseMetaData metaData = conn.getMetaData(); ResultSet rset = metaData.getColumns (null, "schemaName", "tableName", "%"); Значение имени каталога определено как null. Это указывает на то, что параметр должен быть удалён из поиска. Не все типы драйверов позволяют передавать имя каталога как null. Символ "%" определен для шаблона имени колонки, который означает, что необходимо получить ВСЕ колонки для таблицы. Шаблон columnPattern определяет синтаксис, подобно используемому в выражениях SQL оператора LIKE для подбора имён. В частности, символ подчеркивания "_" соответствует любому символу строки, а символ процента "%" соответствует любому количеству последовательных символов в строке. Например, использование шаблона 'j_b' позволяет получать строки «job» и «jab», в то время как шаблон j%b даст любую целевую строку, начинающуюся с «j» и заканчивающуюся на «b», с любым количеством "включая ноль" символом между ними. Набор данных java.sql.ResultSet, возвращаемый методом getColumns, для каждой колонки таблицы включает 18 описательных полей - это имя столбца, тип значений столбца и т.д. Тип столбца определен константой класса java.sql.Types. Пример использования DatabaseMetaData : import java.sql.*; public class Example_DatabaseMetaData { private String userName = "root"; private String password = "****"; public static void main(String args[]) { try { // Загрузка драйвера Class.forName("com.mysql.jdbc.Driver"); // Подключение к серверу БД Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/student", userName, password); // Метаданные текущего подключения DatabaseMetaData metaData = conn.getMetaData(); // Набор данных поддерживаемых типов ResultSet rs = metaData.getTypeInfo(); System.out.println("Набор примитивных типов, поддерживаемых данным типом приложения\n"); while (rs.next()) { System.out.println(rs.getString(1)); } rs.close(); conn.close(); } catch (SQLException e) { System.out.println(e.toString()); } catch (Exception e) { System.out.println(e); } } } Методы DatabaseMetaData
Интерфейс ResultSetMetaDataМетод getMetaData результирующего набора базы данных класса ResultSet возвращает объект ResultSetMetaData. public ResultSetMetaData getMetaData() throws SQLException Класс ResultSetMetaData определяет объект метаданных для текущего набора данных ResultSet. ResultSetMetaData содержит информацию о результирующей таблице - количество колонок, тип значений колонок и т.д. Пример получения метаданных результирующего запроса : ResultSet rs = stmt.executeQuery("select * from users"); ResultSetMetaData rsmd = rs.getMetaData(); int cols = rsmd.getColumnCount(); int rownum = 1; while(rsmd.next()) { System.out.println("Cтpокa : " + rownum++); for (int i = 0; i < cols; i++) { System.out.println("\tColumnLabel : '" + rsmd.getColumnLabel (i + 1) + "', " + "\tDisplaySize : " + rsmd.getColumnDisplaySize (i + 1) + ", " + "\tColumnType : '" + rsmd.getColumnType (i + 1) + "', " + rsmd.getObject(i + 1) + ", "); } } rs.close(); Для каждого результирующего набора обеспечивается получение экземпляра ResultSetMetaData с помощью метода getMetaData(). При динамическом доступе к базе данных необходимо знать, сколько колонок в результирующем наборе, чтобы извлечь информацию о колонках и их именах для вывода. Для извлечения метаданных в примере используются методы getColumnCount - количество полей, и getColumnLabel - наименование поля. |