Самоучитель по SQL-сервер в Linux



Использование драйвера PostgreSQL

В этом разделе рассматривается использование встроенного драйвера JDBC PostgreSQL. Начните с включения пути к файлу postgresql.jar в переменную CLASSPATH. Для этого можно либо задать значение переменной среды CLASSPATH, либо передавать путь в командной строке исполняемого файла при каждом запуске приложения Java. Дополнительную информацию о настройке пути к классам можно найти в инструкциях разработчика вашей виртуальной машины Java.

Далее в процессе написания приложения Java необходимо обеспечить регистрацию класса Driver в программе. При прохождении через загрузчик классов Java класс Driver автоматически регистрируется в классе DriverManager; по этим данным JDBC узнает, какой вариант класса Driver должен использоваться при подключении к базе данных определенного типа. Например, при подключении к базе данных PostgreSQL должен использоваться класс драйвера PostgreSQL и т. д.

Чтобы класс Dri ver был зарегистрирован загрузчиком классов, можно выполнить поиск по имени, как в небольшом фрагменте Java-программы, приведенном в листинге 12.1.

Листинг 12.1. Поиск по имени класса

try {

Class.forName("org.postgresql.Dri ver"):

} catch (ClassNotFoundException cnfe) {

System.err.println("Couldn't find driver class:"):

cnfe.printStackTrace():

}

Метод Cl ass. forName выполняет поиск класса по имени. В данном примере для поиска используется имя «Driver». Загрузчик просматривает содержимое CLASSPATH и ищет класс с заданным именем. Если поиск оказывается успешным, загрузчик читает двоичное описание класса. Если класс не найден, инициируется исключение ClassNotFoundException; в нашем примере обработчик этого исключения выводит сообщение об ошибке. Если это произошло, значит, либо была допущена ошибка при построении драйвера, либо файл .jar отсутствует в пути CLASSPATH.

После регистрации класса Driver наступает следующая стадия — подключение к базе данных PostgreSQL с использованием класса DriverManager. Класс Dri verManager отвечает за работу с URL-адресами JDBC, выбор подходящего драйвера и его дальнейшее применение для подключения к базе данных. URL-адреса JDBC состоят из трех частей, разделенных двоеточиями:

jdbc: тил_дрдйвера : база_двнных

Первая часть, jdbc, всегда остается постоянной и указывает на то, что подключение производится к источнику данных JDBC. Вторая часть, mun_dpaueepa, представляет тип базы данных, к которой вы хотите подключиться. Для подключения к базе данных PostgreSQL используется строка postgresql. Третья часть передается драйверу и используется им для поиска базы данных. Она имеет один из трех форматов:

база_данных

//хост/база_данных

//хост:порт/бвза_данных

В первом формате база данных PostgreSQL работает на локальном хосте со стандартным номером порта, а параметр база_даиных определяет имя базы данных для подключения. Во втором формате задается имя хоста и имя базы данных со стандартным номером порта. Третий формат позволяет задать номер порта. Даже при использовании URL-адреса первого типа подключение JDBC всегда производится через TCP/IP.

Во всех примерах этой главы будет использоваться URL-адрес jdbc:postgresql:// localhost/booktown — мы подключаемся к базе данных booktown на хосте local host. Давайте попробуем объединить все, о чем говорилось в этой главе, и подключиться к базе данных. В листинге 12.2 приведена простая программа Java, открывающая подключение JDBC к базе данных booktown.

Листинг 12.2. Простое подключение JDBC

import Java.sql.DriverManager:

import Java.sql.Connection:

import Java.sql.SQLException;

public class Examplel {

public static void main(String[] argv) {

System.out.printlnC'Checking if Driver is registered with DriverManager."):

try {

Class.forNaraeC'org.postgresql .Driver"):

} catch (ClassNotFoundException cnfe) {

System. out. printlnt "Couldn't find the driver!");

System. out. println( "Let's print a stack trace, and exit."):

cnfe . pri ntStackTrace( ) ;

System.exit(l) ; }

System. out. pri ntln( "Registered the driver ok. so let's make a connection."):

Connection с = null :

try {

// Во втором и третьем аргументах передаются соответственно

// имя пользователя и пароль. Замените данными пользователя

// в своей системе.

с = DriverManager.getConnection("jdbc:postgresql ://localhost/booktown".

"username". "password");

} catch (SQLException se) {

System. out. printlnt "Couldn't connect: print out a stack trace and exit."):

se.printStackTrace() ;

System.exit(l): }

if (c != null)

System. out. printlnC'Hooray! We connected to the database!");

else .

System. out. printlnC'We should never get here.");

}

}

Далее при помощи объекта Connection выполняются любые операции с базой данных PostgreSQL

Обратите внимание на первые три строки листинга 12.2. В них три команды import импортируют классы, необходимые для регистрации драйвера в объекте DriverManager, а также для создания объектов Connection и SQLException. В общем случае команда импортирования, обеспечивающая доступ к классам JDBC, имеет следующий синтаксис (класс — имя класса, экземпляр которого вы хотите создать):

import java.sql .класс

Если вы не уверены в том, какие именно классы вам нужны, импортируйте все классы JDBC следующей командой:

import java.sql .*

Учтите, что импортирование всех классов JDBC означает большое количество непроизводительных затрат. Чтобы программа работала с максимальной эффективностью, следует ограничиваться только теми классами, которые действительно необходимы для работы приложения.