В этой статье описывается внедрение Java транзакций, банковских переводов и товаров на складах и за его пределами на основе JDBC. Поделитесь этим для вашей ссылки, следующим образом:
1. Трансферный бизнес
Когда передача должна выполнять 2 операторы SQL (обновления обновлений), и оба они успешны, транзакция представлена. Если кто -то не удастся, оба они откачут транзакцию.
2. Транзакция должна иметь 4 атрибута : атомность, последовательность, изоляция и стойкость. Эти четыре атрибута обычно называют кислотными атрибутами.
Atomicity. Транзакция - это неразделимая единица работы, и все операции, включенные в транзакцию, либо выполнены, либо нет.
② Последовательность. Транзакция должна заключаться в том, чтобы изменить базу данных с одного согласованного состояния на другое. Последовательность тесно связана с атомальностью.
③ Изоляция. Выполнение транзакции не может быть вмешательством в другие транзакции. То есть операции в рамках транзакции и используемые данные изолированы из других параллельных транзакций, и выполняемые одновременно транзакции не могут мешать друг другу.
④ Долговечность. Постоянство также называется постоянством, что означает, что после совершения транзакции ее изменения в данных в базе данных должны быть постоянными. Другие последующие операции или сбои не должны оказывать на них какого -либо влияния.
3. Вот демонстрационное описание с использованием операции передачи в качестве случая, и точки внимания следующие:
(1) Операция оператора SQL не требует подчинения ручной транзакции
(2) Операция запроса не требует подчинения ручной транзакции.
(3) Однако обновлять, вставить и удалять.
(4) Если баланс отрицательный, вы можете сначала запросить результаты, а затем вынести решение, а затем работать
(5) con.setAutoCommit(false); Вручную запустить транзакцию; con.commit(); вручную совершать транзакцию; con.rollback(); Операция операции
4. Сначала создайте таблицу данных или две таблицы данных. Здесь создайте две таблицы данных для ясности демонстрации.
5. Создайте базу данных и таблицу данных, а затем напишите класс инструментов foundao.java
пакет com.bie.utils; импорт java.sql.connection; import java.sql.drivermanager; импорт java.sql.preparedstatement; импорт java.sql.resultset; импорт java.sql.sqlexcept Для подключения к базе данных*/public class foundao {private static String Driver = "com.mysql.jdbc.driver"; частная статическая строка url = "jdbc: mysql: /// test"; частная статическая строка user = "root"; частная статическая строка пароль = "123456"; /*** * Метод для подключения к базе данных * @return * @Throws classNotFoundException * @Throws SQLexception */public Static Connection getCon () Throws ClassNotFoundException, SQLexception {class.Forname (Driver); // Загрузите систему драйвера базы данных. Connection con = drivermanager.getConnection (URL, пользователь, пароль); System.out.println ("Ссылка на тестовую базу данных успешно"); вернуть CON; }/ *** * Метод для закрытия базы данных * @param con * @param ps * @param rs */ public void close (соединение, подготовлено ps, resultset rs) {if (rs! = Null) {// Закрыть ресурс, чтобы избежать исключения try {rs.close (); } catch (sqlexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} if (ps! = null) {try {ps.close (); } catch (sqlexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} if (con! = null) {try {con.close (); } catch (sqlexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }}} / *** * Согласитесь с методом добавления, удаления и изменения * @param sql * @param arr * @return * / public static boolean addupdatedElete (String sql, Object [] arr) {connection con = null; Подготовленное предприятие PS = NULL; try {con = foundao.getCon (); // Шаг 1: Операция для подключения к базе данных ps = con.prepareStatement (sql); // Шаг 2: Precompile // Шаг 3: Установите значение if (arr! = null && arr.length! = 0) {для (int i = 0; i <arr.length; }} int count = ps.executeUpdate (); // Шаг 4: Выполните оператор SQL if (count> 0) {return true; } else {return false; }} catch (classnotfoundexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } catch (sqlexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } вернуть false; } /*public static void main (string [] args) {try {basedao.getCon (); } catch (classnotfoundexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } catch (sqlexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }}*/}6. Тест находится напрямую в основном методе, поэтому я написал userdao для тестирования и просто посмотрю на эффект.
Пакет com.bie.dao; import java.sql.connection; import java.sql.preparedStatement; импорт java.sql.sqlexception; импорт com.bie.utils.basedao;/*** @author biehongli* * Примечание: * (1) Операция оператора SQL не требует подчинения ручной транзакции * (2) Операция запроса не требует подчинения ручной транзакции, * (3) Однако, обновление, вставка и удаление требуют подчинения ручной транзакции * (4) Если баланс является отрицательным, вы можете сначала запрашивать результат, а затем судить его, а затем управлять IT * @param Args */ public static void (string jects jAnd void void (strings jems); Подготовлено PS1 = NULL; Подготовлено PS2 = NULL; try {// Шаг 1: Операция подключения к базе данных con = basedao.getcon (); // Транзакция автоматически представлена по умолчанию, поэтому по умолчанию верно. Теперь измените True на False, и автоматическая транзакция по умолчанию запрещена //CON.SetAutoCommit(TRUE); // Транзакция 1: если установить на ложь, транзакция должна быть представлена вручную con.setautocommit (false); // Шаг 2: Обновленная string оператора SQL SQL = "Обновление BANK_A SET USERA_RMB = USERA_RMB-500, где usera_id = 1"; String SQL2 = "Обновление BANK_B SET USERB_RMB = USERB_RMB+500, где userB_ID = 1"; // Шаг 3: Precompile SQL PS1 = con.PrepareStatement (SQL); // Шаг 4: Выполните оператор SQL. Хотя SQL был выполнен, он не был сохраняется и обновлен в базу данных ps1.executeupdate (); // Шаг 3: Precompile SQL2 PS2 = CON.PREARESTATEMENT (SQL2); // Шаг 4: Выполнить SQL2. Хотя SQL2 выполняется, он не был удержан и обновлен в базу данных ps2.executeUpdate (); System.out.println ("Передача успешно ..."); // Транзакция 2: вручную совершать транзакцию. Если оба казни успешны, то совершите транзакцию con.commit (); } catch (classnotfoundexception e) {e.printstacktrace (); Попробуйте {// транзакция 3: Если исключение брошено, то откатайте транзакцию con.rollback (); } catch (sqlexception e1) {e1.printstacktrace (); }} catch (sqlexception e) {e.printstacktrace (); } наконец {// закройте ресурс, чтобы избежать исключений foundao.close (con, ps1, null); BasedAo.Close (NULL, PS2, NULL); }}}Демонстрационный эффект заключается в следующем:
For more information about Java related content, please check out the topics of this site: "Summary of Java's skills to operate databases using JDBC", "Summary of Java+MySQL database programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java File and Directory Operation Skills", "Summary of Java Operation DOM Node Skills" and "Summary of Java Cache Operation Навыки"
Я надеюсь, что эта статья будет полезна для всех Java Programming.