Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Java.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3.45 Mб
Скачать

Тема 6.3 Метаданные

Существует целый ряд методов интерфейсов ResultSetMetaData и DatabaseMetaData для интроспекции объектов. С помощью этих методов можно получить список таблиц, определить типы, свойства и количество столбцов БД. Для строк подобных методов нет.

Получить объект ResultSetMetaData можно следующим образом:

ResultSetMetaData rsMetaData = rs.getMetaData();

Некоторые методы интерфейса ResultSetMetaData:

int getColumnCount() – возвращает число столбцов набора результатов объекта ResultSet;

String getColumnName(int column) – возвращает имя указанного столбца объекта ResultSet;

int getColumnType(int column) – возвращает тип данных указанного столбца объекта ResultSet и т.д.

Получить объект DatabaseMetaData можно следующим образом:

DatabaseMetaData dbMetaData = cn.getMetaData();

Некоторые методы весьма обширного интерфейса DatabaseMetaData:

String getDatabaseProductName() – возвращает название СУБД;

String getDatabaseProductVersion() – возвращает номер версии СУБД;

String getDriverName() – возвращает имя драйвера JDBC;

String getUserName() – возвращает имя пользователя БД;

String getURL() – возвращает местонахождение источника данных;

ResultSet getTables() – возвращает набор типов таблиц, доступных для данной БД, и т.д.

Добавим в класс DB метод showDatabaseMetaData() демонстрирующий работу некоторых методов из класса DatabaseMetaData и метод showResultSet() выводящий все данные из объекта класса ResultSet.

Листинг 6.4

import java.sql.*;

public class DB {

private Connection cn;

private Statement st;

private ResultSet rs;

public DB(String path, String nameDB, String login, String pass) {

try {

Class.forName("com.mysql.jdbc.Driver");

try {

cn = DriverManager.getConnection(path + nameDB, login, pass);

try {

st = cn.createStatement();

} catch (SQLException ex) {

System.out.println("Error in Statement " + ex);

}

} catch (SQLException ex) {

System.out.println("Error in create Connection " + ex);

}

} catch (ClassNotFoundException ex) {

System.out.println("Error in download Driver " + ex);

}

}

public void update(String sql) {

try {

st.executeUpdate(sql);

} catch (SQLException ex) {

System.out.println("Error in update " + ex);

}

}

public ResultSet query(String sql) {

try {

rs = st.executeQuery(sql);

} catch (SQLException ex) {

System.out.println("Error in query " + ex);

}

return rs;

}

public void close() {

try {

st.close();

cn.close();

} catch (SQLException ex) {

System.out.println("Error in close " + ex);

}

}

public void showDatabaseMetaData() {

try {

//получаем метаданные

DatabaseMetaData dbmd = cn.getMetaData();

//выводим информацию про БД

System.out.println(dbmd.getDatabaseProductName());

System.out.println(dbmd.getDatabaseProductVersion());

System.out.println(dbmd.getDriverName());

System.out.println(dbmd.getDriverVersion());

} catch (SQLException ex) {

System.out.println("Error in showDatabaseMetaData " + ex);

}

}

public void showResultSet(ResultSet rs) {

try {

//получаем метаданные

ResultSetMetaData rsmd = rs.getMetaData();

//выводим названия столбцов

for (int i = 1; i <= rsmd.getColumnCount(); i++) {

System.out.print(rsmd.getColumnName(i) + "\t");

}

// выводим строки

while (rs.next()) {

System.out.println();

for (int i = 1; i <= rsmd.getColumnCount(); i++) {

System.out.print(rs.getString(i) + "\t");

}

}

} catch (SQLException ex) {

System.out.println("Error in showResultSet " + ex);

}

}

}

public class Main {

public static void main(String[] args) {

DB db = new DB("jdbc:mysql://localhost/", "my_db", "root", "");

db.showDatabaseMetaData();

db.showResultSet(db.query("SELECT * FROM user "));

db.close();

}

}

В результате работы данной программы получили:

MySQL

5.1.53-community

MySQL-AB JDBC Driver

mysql-connector-java-5.1.18

id name

1 user1

2 user2

3 user3