Запрос к базе данных означает поиск по ее данным. Вы отправляете операторы SQL в базу данных. Для этого сначала нужно открыть соединение с базой данных. Когда у вас есть открытое соединение, вам нужно создать объект Statement, например:
Statement statement = connection.createStatement();
После того, как вы создали Statement, вы можете использовать его для выполнения SQL-запросов, например так:
String sql = "select * from people"; ResultSet result = statement.executeQuery(sql);
Когда вы выполняете SQL-запрос, вы получаете ResultSet. ResultSet содержит результат вашего запроса SQL. Результат возвращается в строках со столбцами данных. Вы перебираете строки ResultSet следующим образом:
while(result.next()) {
String name = result.getString("name");
long age = result.getLong("age");
}
Метод ResultSet.next() перемещается к следующей строке в ResultSet, если строк больше нет. Если строк больше, возвращается true. Если строк больше не было, он вернет false.
Вам нужно вызвать next() хотя бы один раз, прежде чем вы сможете прочитать какие-либо данные. Перед первым вызовом next() ResultSet располагается перед первой строкой.
Вы можете получить данные столбца для текущей строки, вызвав некоторые методы getXXX(), где XXX — это примитивный тип данных. Например:
result.getString ("columnName");
result.getLong ("columnName");
result.getInt ("columnName");
result.getDouble ("columnName");
result.getBigDecimal("columnName");
etc.
Имя столбца для получения значения передается в качестве параметра любому из этих вызовов метода getXXX().
Вместо этого вы также можете передать индекс столбца, например так:
result.getString (1);
result.getLong (2);
result.getInt (3);
result.getDouble (4);
result.getBigDecimal(5);
etc.
Чтобы это работало, вам нужно знать, какой индекс имеет данный столбец в ResultSet. Вы можете получить индекс данного столбца, вызвав метод ResultSet.findColumn(), например:
int columnIndex = result.findColumn("columnName");
При итерации большого количества строк ссылка на столбцы по их индексу может быть быстрее, чем по их имени.
Когда вы закончите итерацию ResultSet, вам нужно закрыть и ResultSet, и объект Statement, который его создал(если вы закончили с ним, то есть). Вы делаете это, вызывая их методы close(), например так:
result.close(); statement.close();
Конечно, вы должны вызывать эти методы внутри блока finally, чтобы убедиться, что они вызываются, даже если во время итерации ResultSet происходит исключение.
Полный пример
Вот полный пример кода запроса:
Statement statement = connection.createStatement();
String sql = "select * from people";
ResultSet result = statement.executeQuery(sql);
while(result.next()) {
String name = result.getString("name");
long age = result.getLong("age");
System.out.println(name);
System.out.println(age);
}
result.close();
statement.close();
И вот снова пример с добавленными блоками try-finally. Обратите внимание, я пропустил блоки catch, чтобы сделать пример короче.
Statement statement = null;
try{
statement = connection.createStatement();
ResultSet result = null;
try{
String sql = "select * from people";
ResultSet result = statement.executeQuery(sql);
while(result.next()) {
String name = result.getString("name");
long age = result.getLong("age");
System.out.println(name);
System.out.println(age);
}
} finally {
if(result != null) result.close();
}
} finally {
if(statement != null) statement.close();
}
