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
- Оператор с ресурсами в Существенных Классах запаздывают для получения дополнительной информации.