Новый интерфейс SavePoint JDBC3.0 обеспечивает дополнительное управление транзакцией. Большинство современных СУБД поддерживают SavePoints в их средах, таких как Oracle PL/SQL.
Определите логическую точку отката в транзакции при установке точки сохранения. Если ошибка возникает, когда пройдет точка сохранения, вы можете использовать метод отката, чтобы отменить все изменения, либо только изменения, сделанные после точки сохранения.
Существует два новых метода для объектов соединения, чтобы помочь управлять точками сохранения:
setSavePoint (String SavePointName): определяет новую точку сохранения. Это также возвращает объект SavePoint.
leleaseSavePoint (savePoint savePointName): удалить точку сохранения. Обратите внимание, что для параметра требуется объект SavePoint. Этот объект обычно генерируется методом setSavePoint ().
Существует метод ROLLBACK (String SavePointName), который возвращается обратно в указанную точку сохранения.
Следующий пример демонстрирует, как использовать объект SavePoint:
try {// предположить действительный объект соединения conn.setautocommit (false); Утверждение stmt = conn.createStatement (); // Установить SavePoint SavePoint SavePoint1 = conn.setSavePoint ("savePoint1"); String sql = "вставьте в сотрудников" + "значения (106, 20, 'rita', 'tez')"; stmt.executeupdate (sql); // Отправить узорный оператор SQL, который нарушает string sql = "вставлена в сотрудники" + "Значения (107, 22, 'sita', 'tez')"; stmt.executeupdate (sql); // Если нет ошибки, совершите изменения. conn.commit ();} catch (sqlexception se) {// Если есть ошибка. conn.rollback (savepoint1);} В этом случае ни одно утверждение вставки выше не будет успешным, и все будет отката.
Ниже приведен пример использования учебника SetSavePoint и Transaction для описания отката.
Этот пример кода, основанный на среде и установке базы данных в предыдущей главе, был объяснен.
Скопируйте следующий пример jdbcexample.java, компилируйте и запустите следующее:
// Шаг 1. Импорт Требуемый PackagesImport java.sql.*; Открытый класс jdbcexample {// jdbc имени драйвера и URL -адреса базы данных Static Final String jdbc_driver = "com.mysql.jdbc.driver"; Статическая конечная строка db_url = "jdbc: mysql: // localhost/emp"; // учетные данные базы данных Static Final String user = "username"; статическая конечная строка Pass = "пароль"; public static void main (string [] args) {connection conn = null; Утверждение stmt = null; try {// Шаг 2: Зарегистрировать JDBC Driver Class.forname ("com.mysql.jdbc.driver"); // Шаг 3: Откройте систему соединения.out.println («Подключение к базе данных ...»); conn = drivermanager.getConnection (db_url, пользователь, Pass); // Шаг 4: Установите автоматический коммит как false. conn.setautocommit (false); // Шаг 5: Выполните запрос для удаления Заказ с // требуемыми аргументами для примера RS. System.out.println ("Создание заявления ..."); stmt = conn.createStatement (); // Шаг 6: Теперь перечислите все доступные записи. String sql = "Выберите идентификатор, сначала, последний, возраст от сотрудников"; ResultSet rs = stmt.executequery (sql); System.out.println ("Список результатов набор для справки ...."); printrs (rs); // Шаг 7: Удалить ряды, имеющие удостоверение личности, чем 104 //, но сохраните точку, прежде чем сделать это. SavePoint SavePoint1 = conn.setSavePoint ("rows_deleted_1"); System.out.println ("Удаление строки ..."); String sql = "удалить от сотрудников" + ", где id = 110"; stmt.executeupdate (sql); // oops ... мы удалили слишком неправильные сотрудники! // Шаг 8: Отказ от изменений After Save Point 2. Conn.rollback (savePoint1); // Шаг 9: Удалить ряды, имеющие удостоверение личности, чем 104 //, но сохраните точку, прежде чем сделать это. SavePoint SavePoint2 = conn.setSavePoint ("rows_deleted_2"); System.out.println ("Удаление строки ..."); SQL = "Удалить от сотрудников" + ", где id = 95"; stmt.executeupdate (sql); // Шаг 10: теперь перечислите все доступные записи. SQL = "Выберите идентификатор, сначала, последний, возраст от сотрудников"; rs = stmt.executequery (sql); System.out.println ("Список результатов набор для справки ..."); printrs (rs); // Шаг 10: Очистка среда Rs.close (); stmt.close (); conn.close (); } catch (sqlexception se) {// обрабатывать ошибки для jdbc se.printstacktrace (); // Если есть ошибка, то отказ от изменений. System.out.println ("Отправление данных здесь ..."); попробуйте {if (conn! = null) conn.rollback (); } catch (sqlexception se2) {se2.printstacktrace (); } // end try} catch (Exception e) {// Ошибка обработки для class.forname e.printstacktrace (); } наконец {// наконец -то блок используется для закрытия ресурсов, попробуйте {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // ничего мы не можем попробовать {if (conn! = null) conn.close (); } catch (sqlexception se) {se.printstacktrace (); } // end Наконец -то попробуйте} // end try system.out.println ("woodbye!");} // end main public static void printrs (resultset rs) throws sqlexception {// Убедитесь, что мы начинаем с первой строки rs.beforefirst (); while (rs.next ()) {// Извлечение по имени столбца int id = rs.getint ("id"); int age = rs.getint ("age"); String first = rs.getString ("First"); String Last = Rs.GetString ("last"); // отображать значения System.out.print ("id:" + id); System.out.print (", возраст:" + возраст); System.out.print (", первое:" + первое); System.out.println (", Last:" + Last); } System.out.println (); } // end printrs ()} // end jdbcexampleТеперь давайте составим приведенный выше пример следующим образом:
C:> javac jdbcexample.java
При запуске JDBCEXAMPLE, он дает следующие результаты:
C:> Java Jdbcexample
Подключение к базе данных ... Создание утверждения ... Набор результатов списка для справки .... ID: 95, возраст: 20, первое: SIMA, Last: Chugid: 100, возраст: 18, первое: Zara, Last: Aliid: 101, возраст: 25, первый: Махназ, Последний: Fatmaid: 102, возраст: First: Zaid, Last: Khanid: 103, Age: 30, First: SUMIT, LAST: Последний: Сима, последняя: chugdeleting ряд ... Удаление строки .... Набор результатов списка для справки .... ID: 100, возраст: 18, первое: Zara, Last: Aliid: 101, возраст: 25, первый: махназ, последний: Fatmaid: 102, возраст: 30, первое: Zaid, Last: Hanid: 103, Age: 30, First: Sumit, последний: Mittalid: 110, Age: 203, Age: First!