Руководство по JDBC v.1
Предыдущий | Содержание | Следующий
9 - Пример
// Следующий код может использоваться в качестве шаблона. // Просто надо заменить соответствующие URL, login, пароль, и // SQL-выражения на требуемые в каждой конкретной задаче строки. //------------------------------------------------------------- // // Модуль: SimpleSelect.java // // Описание: Тестовая программа для интерфейса ODBC API. // Это java-приложение соединяется с драйвером JDBC, // испускает запрос "select" и отображает все результаты // в виде таблицы // // Продукт: JDBC to ODBC Bridge // // Автор: Karl Moss // // Дата: февраль 1996 // // Copyright: 1990-1996 INTERSOLV, Inc. // This software contains confidential and proprietary // information of INTERSOLV, Inc. //------------------------------------------------------------- import java.net.URL; import java.sql.*; class SimpleSelect { public static void main (String args[]) { String url = "jdbc:odbc:my-dsn"; String query = "SELECT * FROM emp"; try { // Загружаем драйвер моста jdbc-odbc Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); DriverManager.setLogStream(System.out); // Пытаемся соединиться с драйвером. Идет поиск // хотя бы одного из зарегистированных // драйверов, который может обработать этот URL Connection con = DriverManager.getConnection ( url, "my-user", "my-passwd"); // Если у нас не получится, то будет // сгенерировано исключение. Т.о., если мы до сюда дошли, // мы успешно соединились с URL // Посмотрим, какие замечания были сгенерированы // процедурой соединения. Выведем их. checkForWarning (con.getWarnings ()); // Получить объект DatabaseMetaData и отобразить // некоторую информацию об этом подключении DatabaseMetaData dma = con.getMetaData (); System.out.println("\nConnected to " + dma.getURL()); System.out.println("Driver " + dma.getDriverName()); System.out.println("Version " + dma.getDriverVersion()); System.out.println(""); // Создаем объект Statement, чтобы можно было // отсылать SQL-запросы к драйверу Statement stmt = con.createStatement (); // Отсылаем запрос, получаем объект ResultSet rs = stmt.executeQuery (query); // Показать все колонки и стороки из набора данных dispResultSet (rs); // Закрыть набор данных rs.close(); // Закрыть оператор stmt.close(); // Закрыть соединение con.close(); } catch (SQLException ex) { // Сгенерировалось исключение SQLException. Отловить его // и отобразить информацию об ошибке. // Заметим, что может быть несколько объектов ошибки, // соединенных вместе в одну цепочку System.out.println ("\n*** Поймали SQLException ***\n"); while (ex != null) { System.out.println ("SQLState: " + ex.getSQLState ()); System.out.println ("Сообщение: " + ex.getMessage ()); System.out.println ("Vendor: " + ex.getErrorCode ()); ex = ex.getNextException (); System.out.println (""); } } catch (java.lang.Exception ex) { // Получили ошибку другого типа. Распечатать ее. ex.printStackTrace (); } } //------------------------------------------------------------- // checkForWarning // Проверить, есть ли предупреждения, и отобразить их. // Возвращает true, если предупреждение есть. //------------------------------------------------------------- private static boolean checkForWarning (SQLWarning warn) throws SQLException { boolean rc = false; // Если дан объект SQLWarning, отобразить // сообщения о предупреждениях. Заметьте, что может быть // несколько предупреждений, связанных в цепочку if (warn != null) { System.out.println ("\n *** Warning ***\n"); rc = true; while (warn != null) { System.out.println ("SQLState: " + warn.getSQLState ()); System.out.println ("Message: " + warn.getMessage ()); System.out.println ("Vendor: " + warn.getErrorCode ()); System.out.println (""); warn = warn.getNextWarning (); } } return rc; } //------------------------------------------------------------- // dispResultSet // Отображает все колонки и строки в данном наборе данных //------------------------------------------------------------- private static void dispResultSet (ResultSet rs) throws SQLException { int i; // Получить ResultSetMetaData. Он нужен для // получения загловков колонок ResultSetMetaData rsmd = rs.getMetaData (); // Взять количество колонок в наборе данных int numCols = rsmd.getColumnCount (); // Показать шапку for (i=1; i<=numCols; i++) { if (i > 1) System.out.print(","); System.out.print(rsmd.getColumnLabel(i)); } System.out.println(""); // Показать все данные вплоть до конца набора данных boolean more = rs.next (); while (more) { // Для каждой колонки в цикле: получить // ее значение и показать его for (i=1; i<=numCols; i++) { if (i > 1) System.out.print(","); System.out.print(rs.getString(i)); } System.out.println(""); // Передвинуться на следующую строку набора данных more = rs.next (); } } }
Предыдущий | Содержание | Следующий