Java - SOS!!!!!!!!!!!!!!!!!!!!!!

 
Vista:

SOS!!!!!!!!!!!!!!!!!!!!!!

Publicado por Iratxo (5 intervenciones) el 30/11/2005 09:29:27
Muy buenas!
Estoy realizando una aplicación cliente servidor con acceso a Bases de Datos y mi problema es el siguiente: en un método de una clase destinada exclusivamente al acceso a datos tengo dos deletes. Si ejecuto la aplicación en modo depuración no tengo ningún problema, sin embargo si lo ejecuto normal solo me ejecuta el primer delete! he probado de varias formas y nada,
no lo entiendo, se supone que en los dos modos de ejecución la salida debería ser la misma no?
Utilizo JDeveloper 10g

muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 755
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

RE:SOS!!!!!!!!!!!!!!!!!!!!!!

Publicado por Yamil Bracho (2315 intervenciones) el 30/11/2005 13:48:49
Puedes publicar algo del codigo que estas usando...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SOS!!!!!!!!!!!!!!!!!!!!!!

Publicado por Iratxo (5 intervenciones) el 01/12/2005 10:21:17
Esta es la clase de acceso a datos situada en la parte servidor: utilizo objetos para contener los datos, y concretamente para comunicar el cliente y el servidor mando siempre objetos ClaseContenedor, que tiene una variable "accion" que especifica el tipo de accióna realizar sobre la BD (consulta, modificacion, borrado, crear), y referencias a otros objetos.
Las BD es muy sencillita, lo que nos ocupa: una tabla tarea, que no tiene más que el codigot (clave) y una descripción. Y tarea_usuario, con referencias a las tareas y a los usuarios. Lo que pasa es que cuando no hay referencias a las tareas (en tarea_usuario) pues me gustaría borrar tb la tarea a la que hacía referencia, si no menudo marrón se iba a montar...
Incluyo los dos métodos: primero le llamo a claseTareaUsuarioBorrar(.....) y alli comprueba si hay más referencias a la tarea. Si no las hubiera, debería borrar la tarea tb.
El problema es que si ejecuto depurando el programa, me lo hace todo de maravilla, pero si lo ejecuto (run) normal, pues solo me borra la tupla de tarea_usuario, y la tarea ahí se queda.....
no sé si podreis ayudarme, pero de todas formas muchísimas gracias aunque sea por intentarlo!
otra cosilla ya que estoy... qué debería de especificar como controlador JDBC y URL base de datos si quiero conectar esta aplicación en un servidor linux con Mysql????
mil gracias!!!

public class ClaseAccesodatos {
//nombre del controlador JDBC y URL de la base de datos
static final String CONTROLADOR_JDBC ="sun.jdbc.odbc.JdbcOdbcDriver";// "com.ibm.db2j.jdbc.DB2jDriver";
static final String URL_BASEDEDATOS ="jdbc:odbc:BDTareas";

//Declarar objetos Connection y Statement para acceder a
// la base de datos y realizar consultas
private Connection conexion;
private Statement instruccion;
private String sql;

public ClaseAccesodatos() {
}
//Conectar a la base de datos
private void conectarBD(){
//cargamos el driver
try
{
Class.forName(CONTROLADOR_JDBC); //registrarlo
}
catch(ClassNotFoundException e){};
}

public ClaseContenedor claseTareaBorrar(ClaseContenedor clase){
ClaseContenedor retorno =new ClaseContenedor("ERROR","ERROR");
conectarBD();
try{
conexion=DriverManager.getConnection(URL_BASEDEDATOS);
instruccion=conexion.createStatement();
sql = "delete from tarea where codigot= "+clase.getClaseTarea().getCodigot();
int i = instruccion.executeUpdate(sql);
instruccion.close();
retorno = new ClaseContenedor("RETORNO","");
}
catch(SQLException e){
retorno = new ClaseContenedor("ERROR","ERROR");
}
return retorno;
}
public ClaseContenedor claseTareaUsuarioBorrar(ClaseContenedor clase){
// Parámetros ==> ClaseTareausuario lleno.
// Aquí hay que comprobar si al borrar existe alguna tarea con codigot igual a clase.
// Si no existe desde aquí borramos la tarea en ClaseTarea.
// E ==> lleno
//NE ==> vacío
ClaseContenedor retorno =new ClaseContenedor("ERROR","ERROR");
conectarBD();
try{
conexion=DriverManager.getConnection(URL_BASEDEDATOS);
instruccion=conexion.createStatement();
//primero eliminamos la tarea
sql= "delete from tarea_usuario where nombre='"+clase.getClaseTareaUsuario().getNombre()+"'and codigot="+clase.getClaseTareaUsuario().getCodigot();
int i = instruccion.executeUpdate(sql);
instruccion.close();
retorno = new ClaseContenedor("RETORNO","");

boolean encontrado= true;
conexion=DriverManager.getConnection(URL_BASEDEDATOS);
instruccion=conexion.createStatement();
sql = "select from tarea_usuario where
codigot="+clase.getClaseTareaUsuario().getCodigot();
ResultSet rs = instruccion.executeQuery(sql);
if (!rs.next()){
encontrado=false;

}
instruccion.close();
if (!encontrado){
retorno = claseTareaBorrar(new ClaseContenedor("Borrar","",new ClaseTarea(clase.getClaseTareaUsuario().getCodigot(),"")))
}

}
catch(SQLException e){
retorno =new ClaseContenedor("ERROR","ERROR");
}

return retorno;
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 755
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

RE:SOS!!!!!!!!!!!!!!!!!!!!!!

Publicado por Yamil Bracho (2315 intervenciones) el 01/12/2005 20:17:32
En el metodo claseTareaUsuarioBorrar hazle un System.out.println( sql ) antes de hacer el executeUpdate y asi ves que instruccion se va a ejecutar.
Otra sugerencia es que uses sentencias preparadas (o mejor stored proc) para mejorar el rendimiento de tus operaciones a la BD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar