Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Получение информации о структуре БД


Автор: LSD 10.8.2006, 10:25
При работе с БД часто бывает нужно получить некоторую информацию о структуре базы данных: список таблиц, процедур, поддерживает ли БД ту или иную функцию.

Для получения подобной информации предназначен класс DatabaseMetaData. Получить экземпляр данного класса, можно от Connection-на. Существует аналогичный класс для результатов запросов: ResultSetMetaData - он возвращает информацию о ResultSet, имена столбцов, их типы, тип курсора и т.д.

Для примера получим и распечатаем, список всех таблиц в базе данных (в зависимости от реализации, БД может возвращать информацию не о всех таблицах, а только о таблицах доступных данному пользователю):
Код
public static void printTables()
{
  try
  {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@dbsrv:1521:ORCL", "system", "manager");
    DatabaseMetaData dbmd = conn.getMetaData();
    ResultSet rs = dbmd.getTables(null, null, null, null);
    printResultSet(rs);
  }
  catch(Exception ex)
  {
    ex.printStackTrace();
  }
}

public static void printResultSet(ResultSet rs) throws SQLException
{
  ResultSetMetaData meta = rs.getMetaData();
  String[] columns = new String[meta.getColumnCount()];
  for(int i = 0; i < columns.length; i++)
    columns[i] = meta.getColumnName(i + 1);
  System.out.print('[');
  while(rs.next())
  {
    System.out.print('[');
    for(int i = 0; i < columns.length; i++)
    {
      if(i > 0)
        System.out.print(" , ");
      System.out.print(columns[i]);
      System.out.print(" = ");
      System.out.print(rs.getString(i + 1));
    }
    System.out.println(']');
  }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)