Ver Mensaje Individual
  #8 (permalink)  
Antiguo 05/04/2006, 04:26
OrionKing
 
Fecha de Ingreso: agosto-2005
Mensajes: 142
Antigüedad: 18 años, 8 meses
Puntos: 0
Tengo un problemilla, he creado las funciones de insercion en la BBDD, cada vez que alguien inserta en la BBDD pasa por llama a esa clase. La clase inserta en la base de datos y retorna el último id sertado, como vereis tambies se inserta el ultimo id en un campo de la tabla... la herramienta de trabajo funciona asi...

Mi pregunta esta relacionada con post anterior ya que aqui realizo varios commit el el mimo try y un único rollback en el catch.

Es correcto el siguiente uso

Código PHP:
try{
            Class.
forName("com.mysql.jdbc.Driver");
            
conn DriverManager.getConnection(urluserpass);
            
conn.setAutoCommit(false);
            
            try{
                
//BLOQUEO DE TABLA PARA ESCRITURA

                
PreparedStatement pstm conn.prepareStatement(Sentencia);
                if (
prepare!=null){
                    for(
int pre=1;pre<prepare.length;pre++){
                        
pstm.setString(preprepare[pre]);
                    }
                }
                
pstm.execute();
                
conn.commit();
                
pstm.close();

               
// if(!incremento.equals("none")){
                    
PreparedStatement SlastID conn.prepareStatement("SELECT LAST_INSERT_ID() AS LASTID");
                    
ResultSet lastID SlastID.executeQuery();
                    
conn.commit();
                    while (
lastID.next()){
                        
questionID lastID.getLong("LASTID");
                    }
                     if(!
incremento.equals("none")){
                    
Updat="UPDATE "+tabla+" set "+incremento+" =_idregistro where _idregistro="questionID+" and "+incremento+" = 0";
                    
PreparedStatement Upd conn.prepareStatement(Updat);
                    
resUpdateUpd.executeUpdate();
                    
conn.commit();
                    
                    
//SlastID.close();
                    //lastID.close();
                    
Upd.close();
                }
               
//pstm.close();
                
                    
SlastID.close();
                    
lastID.close();
                    
conn.close();
                
                
                
            }catch (
SQLException ex) {
                
conn.rollback();
                
System.out.println("ERROR en consulta SQL.");
                
System.out.println("SQLException: " ex.getMessage());
                
System.out.println("SQLState: " ex.getSQLState());
                
System.out.println("VendorError: " ex.getErrorCode());
                
            }
finally{
                try{
                    
conn.setAutoCommit(true);
                    
//DESBLOQUEO DE TABLA 
                    // conn.close();
                
} catch (SQLException y) {  System.out.println("ERROR en consulta SQL.");
                
System.out.println("SQLException: " y.getMessage());
                
System.out.println("SQLState: " y.getSQLState());
                
System.out.println("VendorError: " y.getErrorCode());
                }
            }  
//finally
        
} catch(SQLException u){
            
System.out.println("ERROR en consulta conexxion.");
            
System.out.println("SQLException: " u.getMessage());
            
System.out.println("SQLState: " u.getSQLState());
            
System.out.println("VendorError: " u.getErrorCode());
            
        }catch (
ClassNotFoundException e){
            
//Mostra errors de creació del driver
            
System.out.println("No s'ha pogut conectar amb el servidor! :(");
            
        }
        return 
questionID
Por cierto si yo bloqueo la tabla, ¿puedo realizar las 2 o 3 operaciones de forma atomica?
Es decir, que me haga el insert, me lea el ultimo id y en caso necesario me lo inserte en la tabla SIN que nadie pueda escribir o leer de la misma?
El bloqueo de escritura, ¿bloquea tambien la lectura o solo la escritura?... tendria que desempolvar mis apuntes de calse


Muchas gracias por todo.

Última edición por OrionKing; 05/04/2006 a las 04:48