Если соединение JDBC находится в режиме автоматического переоборудования, оно находится по умолчанию, то каждый оператор SQL привержена базе данных при его завершении.
Это может быть для простых приложений, но по трем причинам вы, возможно, захотите отключить автоматическое совершение и управлять своими собственными транзакциями:
Управлять транзакциями и когда изменения применяются к базе данных. Он принимает один оператор SQL или набор операторов SQL в качестве логического блока, и, если какое -либо оператор не удается, вся транзакция не выполняется.
Чтобы включить, вместо драйверов JDBC с использованием руководящей поддержки транзакции автоматического режима по умолчанию используйте метод setautocommit () объекта соединения. Если логическое значение передается в setautocommit (), отключите автоматический коммит. Логическое значение может быть передано в True, чтобы открыть его.
Например, если есть объект с именем Connect Connection, следующий код отключит автоматический коммит:
conn.setautocommit (false);
Отправить и откатить
Как только изменения будут завершены, вы хотите совершить изменения, а затем позвонить в метод Commit (на объекте соединения) следующим образом:
conn.commit ();
В противном случае обновления ROWNBACK, сделанные в базе данных, используют Connect Connect, используя следующий код:
conn.rollback ();
Следующий пример демонстрирует, как использовать объект коммита и откат:
try {// предположить действительный объект соединения conn.setautocommit (false); Утверждение stmt = conn.createStatement (); String sql = "вставьте в сотрудников" + "значения (106, 20, 'rita', 'tez')"; stmt.executeupdate (sql); // Отправить необработанное заявление SQL, которое нарушает string sql = "вставлена в сотрудники" + "Значения (107, 22, 'sita', 'singh')"; stmt.executeupdate (sql); // Если нет ошибки. conn.commit ();} catch (sqlexception se) {// Если есть ошибка. conn.rollback ();}В этом случае ни одно утверждение вставки выше не будет успешным, и все будет отката.
Примеры коммита с транзакцией и откат
Ниже приведен пример использования коммита с транзакцией и описания отката.
Этот пример кода был изучен на основе среды и установки базы данных в предыдущей главе.
Скопируйте 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 (resultset.type_scroll_insensity, resultset.concur_updatable); // Шаг 6: Вставьте строку в таблицы сотрудников System.out.println («Вставка одна строка ....»); String sql = "вставьте в сотрудников" + "значения (106, 20, 'rita', 'tez')"; stmt.executeupdate (sql); // Шаг 7: Вставьте еще одну строку в таблицу сотрудников SQL = "Вставка в сотрудников" + "Значения (107, 22,« SITA ',' singh ') "; stmt.executeupdate (sql); // Шаг 8: Сделайте данные здесь. System.out.println («Коммутирование данных здесь ....»); conn.commit (); // Шаг 9: Теперь перечислите все доступные записи. String sql = "Выберите идентификатор, сначала, последний, возраст от сотрудников"; ResultSet 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
Подключение к базе данных ... Создание утверждения ... Вставка одной строки ... ТЕЗИД: 107, возраст: 22, первое: Сита, последняя: Сингхгудби!