Простой доступ к базе данных - часть 2
Запросы выполнять немного сложнее, чем обновления, поскольку они возвращают информацию из базы данных в виде объекта ResultSet. ResultSet является интерфейсом, представляющим 0 или более строк, являющихся результатом запроса, обращенного к базе данных. В классе JDBC Statement имеется метод executeQuery(), работающий подобно executeUpdate(), за исключением того, что он возвращает из базы данных ResultSet. Метод executeQuery() возвращает ровно один ResultSet, тем не менее имейте в виду, что JDBC поддерживает извлечение множественных результирующих наборов для тех баз данных, которые это позволяют. Ни MySQL, ни mSQL не поддерживают множественные результирующие наборы. Однако важно помнить о такой возможности, когда вы изучаете код для работы с иным ядром базы данных, написанный кем-то другим. В примере 14-5 показан простой запрос. На рис. 14-2 изображена модель данных з таблице test.
Пример 14-5. Простой запрос
import Java, sql.*;
import Java, util.*;
public class Select {
public static void main(String argv[]) {
Connection con = null;
ResourceBundle bundle =ResourceBundle.getBundle("SelectResource");
try {
String url = bundle.getString("URL"); Statement stmt;
ResultSet rs;
Class.forName(bundle.getString("Driver")); // здесь осуществляется соединение
con = DriverManager,getConnection(url, "borg", "");
stmt = con.createStatement();
rs = stmt .executeQuery("SFI FCT* from test ORDER BY test_id");
System, out.print In("Полученные результаты:");
while(rs. next()) {
int a= rs.getInt("test_icT);
String str = rs.getString("test_val");
System.out.print(" ключ= " + a);
System.out.print(" строка= " + str);
System.out.print("\n");
}
stmt.close();
}
catch( SQLException e )
{
e. printStackTrace();
}
finally {
if( con != null ) {
try { con.close(); }
catch( Exception e ) { }
}
}
}
}
Приложение Select выполняет запрос и затем проходит по всем строкам ResultSet с помощью метода next(). До первого обращения к next() ResultSet не указывает ни на какую строку. Каждый вызов next () настраивает ResultSet на следующую строку. JDBC 2:0 вводит понятие результирующего набора с перемещением (scrollable). Если ваш экземпляр ResultSet позволяет перемещение, можно также обращаться к методу previous() для перемещения по результирующему набору в обратном направлении. Обработка строк заканчивается, когда next () возвращает false.