|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Вообще, чтобы обработать любой SQL-оператор с JDBC, Вы следуете за этими шагами:
ResultSet объект.Эта страница использует следующий метод, CoffeeTables.viewTable, от учебной выборки, чтобы демонстрировать эти шаги. Этот метод выводит содержание таблицы COFFEES. Этот метод будет обсужден более подробно позже в этом учебном руководстве:
public static void viewTable(Connection con, String dbName)
throws SQLException {
Statement stmt = null;
String query = "select COF_NAME, SUP_ID, PRICE, " +
"SALES, TOTAL " +
"from " + dbName + ".COFFEES";
try {
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + "\t" + supplierID +
"\t" + price + "\t" + sales +
"\t" + total);
}
} catch (SQLException e ) {
JDBCTutorialUtilities.printSQLException(e);
} finally {
if (stmt != null) { stmt.close(); }
}
}
Во-первых, установите соединение с источником данных, который Вы хотите использовать. Источник данных может быть DBMS, файловой системой наследства, или некоторым другим источником данных с соответствующим драйвером JDBC. Это соединение представляется a Connection объект. См. Установление Соединения для получения дополнительной информации.
A Statement интерфейс, который представляет SQL-оператор. Вы выполняетесь Statement объекты, и они генерируют ResultSet объекты, который является таблицей данных, представляющих набор результатов базы данных. Вы нуждаетесь в a Connection объект создать a Statement объект.
Например, CoffeesTables.viewTable создает a Statement объект со следующим кодом:
stmt = con.createStatement();
Есть три различных видов операторов:
Statement: Используемый, чтобы реализовать простые SQL-операторы без параметров.PreparedStatement: (Расширяется Statement.) Используемый для того, чтобы предварительно скомпилировать SQL-операторы, которые могли бы содержать входные параметры. См. Используя Готовые Операторы для получения дополнительной информации.CallableStatement: (Расширяется PreparedStatement.) Используемый, чтобы выполнить хранимые процедуры, которые могут содержать оба параметра ввода и вывода. См. Хранимые процедуры для получения дополнительной информации.Чтобы выполнить запрос, вызовите execute метод от Statement такой как следующее:
execute: Возвраты true если первый объект, который возвращает запрос, является a ResultSet объект. Используйте этот метод, если запрос мог бы возвратиться один или больше ResultSet объекты. Получите ResultSet объекты, возвращенные из запроса, неоднократно вызывая Statement.getResutSet.executeQuery: Возвраты один ResultSet объект.executeUpdate: Возвращает целое число, представляющее число строк, на которые влияет SQL-оператор. Используйте этот метод, если Вы используете INSERT, DELETE, или UPDATE SQL-операторы.Например, CoffeeTables.viewTable выполняемый a Statement объект со следующим кодом:
ResultSet rs = stmt.executeQuery(query);
См. Получение и Изменение Значений от Наборов результатов для получения дополнительной информации.
Вы получаете доступ к данным в a ResultSet объект через курсор. Отметьте, что этот курсор не является курсором базы данных. Этот курсор является указателем, который указывает на одну строку данных в ResultSet объект. Первоначально, курсор располагается перед первой строкой. Вы вызываете различные методы, определенные в ResultSet возразите, чтобы переместить курсор.
Например, CoffeesTables.viewTable неоднократно вызывает метод ResultSet.next перемещать курсор вперед одной строкой. Каждый раз это вызывает next, метод выводит данные в строке, где курсор в настоящий момент располагается:
try {
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + "\t" + supplierID +
"\t" + price + "\t" + sales +
"\t" + total);
}
}
// ...
См. Получение и Изменение Значений от Наборов результатов для получения дополнительной информации.
Когда Вы заканчиваетесь, используя a Statement, вызовите метод Statement.close чтобы сразу высвободить средства, это использует. Когда Вы вызываете этот метод, ResultSet объекты закрываются.
Например, метод CoffeesTables.viewTable гарантирует что Statement объект закрывается в конце метода, независимо от любого SQLException брошенные объекты, обертывая это в a finally блок:
} finally {
if (stmt != null) { stmt.close(); }
}
JDBC бросает SQLException когда это встречается с ошибкой во время взаимодействия с источником данных. См. Исключения SQL Обработки для получения дополнительной информации.
В JDBC 4.1, который доступен в Java выпуск 7 SE и позже, можно использовать оператор попытки с ресурсами, чтобы автоматически закрыться Connection, Statement, и ResultSet объекты, независимо от ли SQLException был брошен. Автоматический оператор ресурса состоит из a try оператор и один или более объявленные ресурсы. Например, можно изменить CoffeesTables.viewTable так, чтобы Statement возразите закрывается автоматически, следующим образом:
public static void viewTable(Connection con) throws SQLException {
String query = "select COF_NAME, SUP_ID, PRICE, " +
"SALES, TOTAL " +
"from COFFEES";
try (Statement stmt = con.createStatement()) {
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + ", " + supplierID +
", " + price + ", " + sales +
", " + total);
}
} catch (SQLException e) {
JDBCTutorialUtilities.printSQLException(e);
}
}
Следующий оператор try- оператор с ресурсами, который объявляет один ресурс, stmt, это будет автоматически закрыто когда try блок завершается:
try (Statement stmt = con.createStatement()) {
// ...
}
См. try- Оператор с ресурсами в Существенных Классах запаздывают для получения дополнительной информации.