El control de la transacción es realizado por el objeto Connection. Cuando una conexión se crea, por defecto es en modo auto - commit. Esto significa que cada instrucción individual SQL se trata como una transacción en sí misma, y se comprometerá en cuanto la ejecución sea terminada.
Ejemplo : tenemos dos insert , para que se guarden se tienen que guardar los dos bien .osea si aceptamos el primero y el segundo nunca se guarda o da un error el primero no se guarda.
//////////////////////////////////////////////
// primer boton
try{
if (con.getAutoCommit() )
con.setAutoCommit( false );
stat = con.createStatement();
//vamos hacer le primer insert
String unsql = "insert into persona values ('"+jTextField1.getText()
+ "', '" + jTextField2.getText() + "', '"
+jTextField3.getText()+ "', '" +jTextField4.getText()
+ "' )";
stat.executeUpdate(unsql);
}
catch(Exception e){
System.out.println(" "+e);
}
///////////////////////////////////////////////////////////
// segundo boton
try{
String unsql = "insert into persona values ('"+jTextField5.getText() + "', '" + jTextField6.getText() + "', '" + jTextField7.getText() + "', '" +jTextField8.getText() + "' )";
stat.executeUpdate(unsql);
con.commit();
}
catch(Exception e){
deshacer( ); // este metodo es importante
System.out.println(" "+e);
}
////////////////////////////////////////////////////////////
void deshacer( ) {
try {
con.rollback();
}
catch (SQLException e) {
System.out.println("Error. No hemos podido deshacer." + e.getMessage() );
}
}
////////////////////////////////////////////////////////////
aunque esta un podo desordenado el codigo, espero que dando una vuelta lo entiendan, sobre la conexion
Connection con; // variables de instancia
Statement stat ;
/** Creates new form ventana */
public ventana() { // en el constructor
initComponents();
try{
Class.forName("org.postgresql.Driver"); // este busca el jar de postgres
con = DriverManager.getConnection("jdbc:postgresql://localhost/arq2 tier", "postgres", "1234");
}
catch(Exception e){
System.out.println(" "+e);
}
}
2 comentarios:
te falta el stat.close();
aca hay un ejemplo mas claro que raramente lo saque de la pag de microsoft
public static void executeTransaction(Connection con) {
try {
//Switch to manual transaction mode by setting
//autocommit to false. Note that this starts the first
//manual transaction.
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong size')");
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong color')");
con.commit(); //This commits the transaction and starts a new one.
stmt.close(); //This turns off the transaction.
System.out.println("Transaction succeeded. Both records were written to the database.");
}
catch (SQLException ex) {
ex.printStackTrace();
try {
con.rollback();
System.out.println("Transaction failed. No records were written to the database.");
}
catch (SQLException se) {
se.printStackTrace();
}
}
}
Hola primero que nada muchas gracias por el aporte esta muy bueno paro quisiqera saber si este ejemplo funcionaria de la misma forma para la insercion en una tabla y modificacion en otra
Publicar un comentario