Se a conexão JDBC estiver no modo Autocomit, ela será por padrão, todas as instruções SQL estarão comprometidas com o banco de dados quando for concluído.
Isso pode ser para aplicativos simples, mas, por três motivos, você pode desativar o comprometimento automático e gerenciar suas próprias transações:
Para controlar as transações e quando as alterações são aplicadas ao banco de dados. É necessário uma única instrução SQL ou um conjunto de instruções SQL como uma unidade lógica e, se alguma instrução falhar, toda a transação falhará.
Para ativar, em vez de drivers JDBC usando o suporte à transação manual do modo de compromisso automático por padrão, use o método setautocommit () do objeto de conexão. Se um valor booleano for passado para setautocommit (), desligue o Commit Automatic. Um valor booleano pode ser transmitido para reabri -lo.
Por exemplo, se houver um objeto chamado Connection, o código a seguir desativará o Commit Automatic:
Conn.SetAutocomit (false);
Envie e reversão
Depois que as alterações forem concluídas, você deseja comprometer as alterações e chamar o método Commit (no objeto de conexão) da seguinte maneira:
Conn.Commit ();
Caso contrário, as atualizações de reversão feitas no banco de dados usam conexão Connect Conn, usando o seguinte código:
Conn.Rollback ();
O exemplo a seguir demonstra como usar um objeto de confirmação e reversão:
tente {// assumem um objeto de conexão válido Conn.SetAutocommit (false); Instrução stmt = conn.createstatement (); String sql = "inserir em funcionários" + "valores (106, 20, 'rita', 'tez')"; stmt.executeUpdate (SQL); // envia uma declaração SQL malformada que quebra a string sql = "inserido em funcionários" + "valores (107, 22, 'sita', 'singh')"; stmt.executeUpdate (SQL); // Se não houver erro. Conn.Commit ();} Catch (SqLexception SE) {// Se houver algum erro. Conn.Rollback ();}Nesse caso, nenhuma declaração de inserção acima terá sucesso e tudo será revertido.
Exemplos de confirmação de transação e reversão
A seguir, é apresentado um exemplo de uso da transação e descrição de Rollback.
Este código de amostra foi aprendido com base na instalação do ambiente e do banco de dados no capítulo anterior.
Copie o jdbcexample.java do exemplo a seguir no passado, compilar e executar, como mostrado abaixo:
// Etapa 1. Importar pacotes necessários String final estática db_url = "jdbc: mysql: // localhost/empp"; // credenciais de banco de dados estático final string user = "nome de usuário"; estático final string pass = "senha"; public static void main (string [] args) {conexão conn = null; Instrução stmt = null; tente {// Etapa 2: Registre JDBC Driver Class.ForName ("com.mysql.jdbc.driver"); // Etapa 3: abra um sistema de conexão.out.println ("conectando ao banco de dados ..."); Conn = DriverManager.getConnection (db_url, usuário, passa); // Etapa 4: Defina o comprometimento automático como falso. Conn.SetAutocomit (false); // Etapa 5: execute uma consulta para criar declaração com // argumentos necessários para o exemplo RS. System.out.println ("Criando declaração ..."); stmt = Conn.Createstatement (ResultSet.Type_Scroll_insensitive, ResultSet.Concur_UpDatable); // Etapa 6: Insira uma linha no sistema de tabela de funcionários.out.println ("Inserindo uma linha ...."); String sql = "inserir em funcionários" + "valores (106, 20, 'rita', 'tez')"; stmt.executeUpdate (SQL); // Etapa 7: Insira mais uma linha na tabela de funcionários SQL = "Insira nos funcionários" + "valores (107, 22, 'sita', 'singh')"; stmt.executeUpdate (SQL); // Etapa 8: Compreenda dados aqui. System.out.println ("Comeritando dados aqui ...."); Conn.Commit (); // Etapa 9: agora liste todos os registros disponíveis. String sql = "Selecione ID, primeiro, último, idade dos funcionários"; ResultSet rs = stmt.executeQuery (SQL); System.out.println ("Resultado da lista Conjunto de referência ..."); Printrs (RS); // Etapa 10: ambiente de limpeza rs.close (); stmt.close (); Conn.Close (); } catch (sqlexception se) {// manipula erros para jdbc SE.printStackTrace (); // Se houver um erro, reverte as alterações. System.out.println ("Rolling Back Data aqui ..."); tente {if (conn! = null) conn.rollback (); } catch (sqLexception SE2) {SE2.PrintStackTrace (); } // End Try} Catch (Exceção e) {// Lidar com erros para class.ForName E.printStackTrace (); } finalmente {// Finalmente o bloco usado para fechar os recursos tente {if (stmt! = null) stmt.close (); } catch (sqLexception SE2) {} // nada que possamos fazer tente {if (conn! = null) conn.close (); } catch (sqLexception SE) {SE.printStackTrace (); } // End Finalmente tente} // End Try System.out.println ("Adeus!");} // END PRINCIPTÍTICO PRÚDICO PRÚDICO PRINTRS (ResultSet rs) lança sqLexception {// Verifique se começamos com a primeira linha rs.beforeFirst (); while (rs.Next ()) {// recuperar por nome da coluna int id = rs.getInt ("id"); int age = rs.getInt ("idade"); String primeiro = rs.getString ("primeiro"); String last = rs.getString ("last"); // Exibir valores system.out.print ("id:" + id); System.out.print (", idade:" + idade); System.out.print (", primeiro:" + primeiro); System.out.println (", last:" + last); } System.out.println (); } // end Printrs ()} // END JDBCEXAMPLEAgora vamos compilar o exemplo acima da seguinte forma:
C:> javac jdbcexample.java
Ao executar o JDBCExample, ele produz os seguintes resultados:
C:> Java Jdbcexample
Connecting to database...Creating statement...Inserting one row....Committing data here....List result set for reference....ID: 100, Age: 18, First: Zara, Last: AliID: 101, Age: 25, First: Mahnaz, Last: FatmaID: 102, Age: 30, First: Zaid, Last: KhanID: 103, Age: 28, First: Sumit, Last: MittalID: 106, Age: 20, First: Rita, Last: Tezid: 107, idade: 22, primeiro: Sita, último: Singhgoodbye!