Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Java.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3.45 Mб
Скачать

Тема 6.2 Класс ResultSet

Этот класс представляет результирующий набор базы данных. Он обеспечивает приложению построчный доступ к результатам запросов в базе данных. Во время обработки запроса ResultSet поддерживает указатель на текущую обрабатываемую строку. Приложение последовательно перемещается по результатам, пока они не будут все обработаны или не будет закрыт ResultSet.

Основные методы:

public boolean absolute(int row) throws SQLException

Метод перемещает курсор на заданное число строк от начала, если число положительно, и от конца - если отрицательно.

public void afterLast() throws SQLException

Этот метод перемещает курсор в конец результирующего набора за последнюю строку.

public void beforeFirst() throws SQLException

Этот метод перемещает курсор в начало результирующего набора перед первой строкой.

public void deleteRow() throws SQLException

Удаляет текущую строку из результирующего набора и базы данных.

public ResultSetMetaData getMetaData() throws SQLException

Предоставляет объект метаданных для данного ResultSet. Класс ResultSetMetaData содержит информацию о результирующие таблице, такую как количество столбцов, их заголовок и т.д.

public int getRow() throws SQLException Возвращает номер текущей строки.

public Statement getStatement() throws SQLException

Возвращает экземпляр Statement, который произвел данный результирующий набор.

public boolean next() throws SQLException public boolean previous() throws SQLException

Эти методы позволяют переместиться в результирующем наборе на одну строку вперед или назад. Во вновь созданном результирующем наборе курсор устанавливается перед первой строкой, поэтому первое обращение к методу next() влечет позиционирование на первую строку. Эти методы возвращают true, если остается строка для дальнейшего перемещения. Если строк для обработки больше нет, возвращается false. Если открыт поток InputStream для предыдущей строки, он закрывается. Также очищается цепочка предупреждений SQLWarning.

public void close() throws SQLException

Осуществляет немедленное закрытие ResultSet вручную. Обычно этого не требуется, так как закрытие Statement, связанного с ResultSet, автоматически закрывает ResultSet. К сожалению, не все разработчики JDBC-драйверов придерживаются этих конвенций, например, драйвер Oracle самостоятельно не закрывает ResultSet'ы, так что настоятельно советую закрывать вручную.

Листинг 6.3

import java.sql.*;

public class DB {

private Connection cn;

private Statement st;

private ResultSet rs;

public DB(String path, String nameDB, String login, String pass) {

try {

Class.forName("com.mysql.jdbc.Driver");

try {

cn = DriverManager.getConnection(path + nameDB, login, pass);

try {

st = cn.createStatement();

} catch (SQLException ex) {

System.out.println("Error in Statement " + ex);

}

} catch (SQLException ex) {

System.out.println("Error in create Connection " + ex);

}

} catch (ClassNotFoundException ex) {

System.out.println("Error in download Driver " + ex);

}

}

public void update(String sql) {

try {

st.executeUpdate(sql);

} catch (SQLException ex) {

System.out.println("Error in update " + ex);

}

}

public ResultSet query(String sql) {

try {

rs = st.executeQuery(sql);

} catch (SQLException ex) {

System.out.println("Error in query " + ex);

}

return rs;

}

public void close() {

try {

st.close();

cn.close();

} catch (SQLException ex) {

System.out.println("Error in close " + ex);

}

}

}

import java.sql.*;

public class Main {

public static void main(String[] args) {

DB db = new DB("jdbc:mysql://localhost/", "my_db", "root", "");

ResultSet rs = db.query("SELECT * FROM user ");

try {

while (rs.next()) {

System.out.println("ib = " + rs.getInt(1) + "\tname = " + rs.getString(2));

}

} catch (SQLException ex) {

System.out.println("Error in rs " + ex);

}

db.close();

}

}

В результате выполнения данной программы получим:

ib = 1 name = user1

ib = 2 name = user2

ib = 3 name = user3