Este artigo descreve a implementação de Java de transações, transferências bancárias e mercadorias dentro e fora de armazéns com base no JDBC. Compartilhe -o para sua referência, como segue:
1. Negócio de transferência
Quando a transferência deve executar 2 instruções SQL (atualizações de atualização) e as duas são bem -sucedidas, a transação é enviada. Se alguém falhar, os dois reverterão a transação.
2. Uma transação deve ter 4 atributos : atomicidade, consistência, isolamento e persistência. Esses quatro atributos são geralmente chamados de atributos ácidos.
① Atomicidade. Uma transação é uma unidade de trabalho inseparável e todas as operações incluídas na transação são feitas ou não.
② Consistência. Uma transação deve ser alterar o banco de dados de um estado consistente para outro. A consistência está intimamente relacionada à atomicidade.
③ Isolamento. A execução de uma transação não pode ser interferida por outras transações. Ou seja, as operações dentro de uma transação e os dados utilizados são isolados de outras transações simultâneas, e as transações executadas simultaneamente não podem interferir entre si.
④ Durabilidade. A permanência também é chamada de permanência, o que significa que, uma vez que uma transação seja cometida, suas alterações nos dados no banco de dados devem ser permanentes. Outras operações ou falhas subsequentes não devem ter nenhum impacto sobre elas.
3. Aqui está uma descrição de demonstração usando a operação de transferência como um caso, e os pontos de atenção são os seguintes:
(1) Uma operação de instrução SQL não requer envio de transação manual
(2) A operação de consulta não requer envio de transações manuais.
(3) No entanto, atualizar, inserir e excluir requer envio de transações manuais
(4) Se o saldo for negativo, você poderá consultar os resultados primeiro e depois fazer um julgamento e depois operar
(5) con.setAutoCommit(false); iniciar manualmente a transação; con.commit(); cometer manualmente a transação; con.rollback(); Operação de reversão da transação
4. Primeiro, crie uma tabela de dados ou duas tabelas de dados. Aqui, crie duas tabelas de dados para clareza de demonstração.
5. Crie um banco de dados e tabela de dados e depois escreva a classe de ferramentas baseada
pacote com.bie.utils; importar java.sql.connection; importar java.sql.driverManager; importar java.sql.preparedStatement; import java.sql.resultset; importância java.SQL.SqLexception; classe para conectar ao banco de dados*/public class BasedAo {private static string driver = "com.mysql.jdbc.driver"; String estática privada url = "jdbc: mysql: /// teste"; String estática privada Usuário = "root"; senha estática privada senha = "123456"; /*** * Método para conectar -se ao banco de dados * @return * @throws ClassNotFoundException * @THOWS SQLEXCECCEIRO */Public Static Connection getCon () lança classeNotFoundException, sqLexception {Class.ForName (driver); Carregar o driver de banco de dados System.out.Println ("Carregamento de testes o data -base" Conexão con = driverManager.getConnection (URL, usuário, senha); System.out.println ("Link do banco de dados de teste com sucesso"); retornar con; }/ *** * Método para fechar o banco de dados * @param con * @param ps * @param rs */ public static void feche (conexão con, preparado estatement ps, resultSet rs) {if (rs! = Null) {// feche o recurso para evitar exceção Experimente {rs.close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }} if (ps! = null) {tente {ps.close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }} if (con! = null) {try {con.close (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }}} / *** * Concorde com o método de adicionar, excluir e modificar * @param sql * @param arr * @return * / public static boolean addupdatelete (string sql, object [] arr) {conexão Con = null; Preparado estatement ps = null; tente {con = baseado no banco de dados PS = Con.Preparestatement (sql); // Etapa 2: pré -compile // Etapa 3: defina o valor se (arr! = null && arr.length! }} int count = ps.executeUpdate (); // Etapa 4: execute a instrução SQL se (contagem> 0) {return true; } else {return false; }} Catch (ClassNotFoundException e) {// TODO BLOCO DE CATAGEM AUTOGERATO E.PRINTSTACKTRACE (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); } retornar false; } /*public static void main (string [] args) {try {Basedao.getCon (); } catch (classNotFoundException e) {// TODO BLOCO DE CATAGEM AUTOMENTADO E.PRINTSTACKTRACE (); } catch (sqLexception e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); }}*/}6. O teste é realizado diretamente no método principal, então escrevi o Userdao para teste e apenas olho para o efeito.
pacote com.bie.dao; importar java.sql.connection; importar java.sql.preparedStatement; importar java.sql.sqLexception; importar com.bie.utils.basedao;/*** @author biehongli*@version time: februghao; 2017, 2017, 2017 a 4*hor. / **** Nota:* (1) Uma operação de instrução SQL não requer envio de transação manual* (2) a operação de consulta não requer envio de transação manual,* (3) No entanto, atualize, inserir e excluir requer a transação manual (4) se o balanço é negativo, você pode consultar o resultado primeiro e depois o julgamento e depois o julgamento* @parado* @cragumer* @argts* @argts* con = null; Preparado estatamento ps1 = nulo; Preparado PS2 = nulo; tente {// Etapa 1: a operação de conectar -se ao banco de dados con = baseado em getAo.getCon (); // A transação é enviada automaticamente por padrão, portanto o padrão é verdadeiro. Agora mude fiel ao FALSE, e a transação automática padrão é proibida //con.setaTautocommit(tuRue); // Transação 1: Se definido como false, a transação precisa ser enviada manualmente manualmente. // Etapa 2: a instrução SQL atualizada string sql = "Atualizar banco_a definir usera_rmb = usera_rmb-500 where usera_id = 1"; String sql2 = "update bak_b set userb_rmb = userb_rmb+500 where userb_id = 1"; // Etapa 3: SQL PS1 pré -compilado = Con.Preparestatement (SQL); // Etapa 4: execute a instrução SQL. Embora o SQL tenha sido executado, ele não foi persistido e atualizado para o banco de dados ps1.executeUpdate (); // Etapa 3: SQL2 PS2 pré -compilado = CON.PROPARESTATEMENT (SQL2); // Etapa 4: execute sql2. Embora o SQL2 seja executado, ele não foi persistido e atualizado para o banco de dados PS2.ExecuteUpdate (); System.out.println ("Transferência bem -sucedida ..."); // Transação 2: Compreenda manualmente a transação. Se ambas as execuções forem bem -sucedidas, compreenda a transação CON.Commit (); } catch (classNotFoundException e) {e.printStackTrace (); tente {// Transação 3: se uma exceção for lançada, recue a transação Con.Rollback (); } catch (sqLexception e1) {e1.printStackTrace (); }} catch (sqLexception e) {e.printStackTrace (); } finalmente {// feche o recurso para evitar exceções baseadas em baseado (con, ps1, nulo); Baseado em base (nulo, ps2, nulo); }}}O efeito demo é o seguinte:
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 Habilidades de operação "
Espero que este artigo seja útil para a programação Java de todos.