На главную страницу
Форум txt.version   




Статья :: PostgreSQL Специфика использования JDBC
 

Специфика использования JDBC с PostgreSQL

Данный раздел посвящен трем проблемам, часто возникающим при использовании JDBC с PostgreSQL. Первая проблема относительно проста. В объектах Resul tSet, возвращаемых в результате вызова executeQuery, указатель текущей записи всегда устанавливается в позицию перед первой записью, возвращенной запросом. Таким образом, перед выборкой данных из Resul tSet необходимо перейти к первой записи методом next. Пример приведен в листинге 12.9. При первом вызове getStri ng возникает исключение, поскольку текущей записи в наборе нет. После вызова next функция getStri ng успешно возвращает значение из первой записи набора.

Листинг 12.9. Выборка данных из первой записи средствами JDBC

ResultSet newSet = null;

try {

newSet = s.executeQuery("SELECT * FROM book"):

} catch (SQLException se) {

System.out.printlnC'We got an exception while executing our query:" +

"This probably means that our SQL is invalid.");

Специфика использования JDBC с PostgreSQL

se.printStackTrace() :

System.exit(1):

}

try {

String value = newSet.getString(l); // ПЛОХО: метод next() еще не вызывался

} catch (Exception e) {

System.out.phntlnC'We'll get an exception here, because we haven't" +

" stepped to the first row of the ResultSet yet.");

e.printStackTrace():

}

try {

newSet.next():

String value - newSet.getString(l);

} catch (SQLException se) {

System.out.printlnC'We'll only get an exception here if we've lost" +

"our connection, which isn't our fault.");

se.printStackTrace();

System.exit(l);

}

Следующая проблема тоже относится к объектам ResultSet, но она значительно проще первой. Вы не можете узнать количество записей, возвращенных в результате запроса, без вызова next с увеличением счетчика. Другими словами, в классе ResultSet не существует простого метода для получения количества записей в наборе. Отчасти это связано с тем, что JDBC может и не получать записи от PostgreSQL (и вообще не знать о существовании таких записей) до вызова next.

Последняя проблема менее очевидна. В многопоточных программах каждый программный поток должен работать с собственными объектами Statement и ResultSet. Дело в том, что в этих объектах хранятся данные состояния, и обращения к ним со стороны других программных потоков могут привести к повреждению этих данных.



 

PostgreSQL Специфика использования JDBC

страницы в данном разделе 
 PostgreSQL Глава 12. JDBC  PostgreSQL JDBC
 PostgreSQL Построение драйвера JDBC  PostgreSQL Использование драйвера
 PostgreSQL Использование JDBC  PostgreSQL Специфика использования JDBC


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста