Выборка данных из первой записи средствами JDBC
Листинг 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. Дело в том, что в этих объектах хранятся данные состояния, и обращения к ним со стороны других программных потоков могут привести к повреждению этих данных.