Foros del Web » Programación para mayores de 30 ;) » Java »

preparedStatement() no preparado

Estas en el tema de preparedStatement() no preparado en el foro de Java en Foros del Web. Hola, estoy armando un pequeño proyecto con J2EE y estoy trabado en u problema. Puntualmente es un preparedStatement que o se prepara, es decir, le ...
  #1 (permalink)  
Antiguo 29/01/2008, 10:40
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Pregunta preparedStatement() no preparado

Hola, estoy armando un pequeño proyecto con J2EE y estoy trabado en u problema.
Puntualmente es un preparedStatement que o se prepara, es decir, le paso el parametro y no lo toma, obviamente debo estar haciendo algo mal que no veo, la cosa es asi, el parametro se lo paso usado javaBeans desde una pagina jsp, lo pasa bien, ya que en debug mode veo en el campo 'cuit' (que es como se llama) que esta el valor que yo ingrese. el tema es que al ejecutar "sentencia.setString(1, cuit);" no carga el valor en el query.
Este es el codigo de mi clase:
Código:
public class ConsultaCuitBD {

	private String cuit;
	private boolean valido = false;
	private boolean hayError = false;
	
	//campos de la bd a mostrar
	private String empresa;
	private String domicilio;
	private String telefono1;
	private String telefono2;
	private String mail;
	private String clave;
	private String categoria;
	private String ejecutivo;
	private String vendedor;
	private String estado;
	
	private boolean ejecutarConsulta() throws SQLException{
		boolean existe = false;
		
		Connection coneccion = null;
		PreparedStatement sentencia = null;
		ResultSet resultado = null;
		
		String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
		String URL = "jdbc:derby:e:\\Usuarios";
		String QUERY = 	"SELECT * FROM AGUSTIN.EMPRESAS WHERE CUIT = ?";
		
		try{
			System.out.println("Iniciando DRIVER "+DRIVER+"...");
			Class.forName(DRIVER);
			System.out.println("Driver iniciado - Conectando a URL "+URL+"...");
			coneccion = DriverManager.getConnection(URL);
			System.out.println("Coneccion exitosa - Iniciando QUERY "+QUERY+"...");
			sentencia = coneccion.prepareStatement(QUERY);
			System.out.println("QUERY preparado - Seteando OBJECT consultaCuit "+cuit+"...");
			sentencia.setString(1, cuit);
			System.out.println("Ejecutando sentencia "+QUERY+"...");
			sentencia.executeQuery();
			System.out.println("Sentencia "+QUERY+" ejecutada exitosamente.");
			
			if(resultado.next()){
				//si encontro
				existe = true;
				empresa = resultado.getString("EMPRESA");
				cuit = resultado.getString("CUIT");
				domicilio = resultado.getString("DOMICILIO");
				telefono1 = resultado.getString("TELEFONO1");
				telefono2 = resultado.getString("TELEFONO2");
				mail = resultado.getString("MAIL");
				clave = resultado.getString("CLAVE");
				categoria = resultado.getString("CATEGORIA");
				ejecutivo = resultado.getString("EJECUTIVO");
				vendedor = resultado.getString("VENDEDOR");
				estado = resultado.getString("ESTADO");
			} else {
				existe = false;
			}
		} catch (Exception e){
			e.printStackTrace();
		} finally {
			if(resultado != null) resultado.close();
			if(sentencia != null) sentencia.close();
			if(coneccion != null) coneccion.close();
		}
		
		return existe;	
	}
	
	//getters y setters
	
	public String getCuit(){
		return cuit;
	}

	public void setCuit(String c){
		cuit = c;
	}
	public boolean isValid(){
		if(valido) return true;
		try{
			valido = ejecutarConsulta();
			hayError = false;
		}catch(Exception e){
			valido = false;
			hayError = true;
		}
		return valido;
	}
	
	public boolean isError(){
		return hayError;
	}
El codigo continua con el resto de los getters, pero no le veo motivo a poner todo lo demas.

Alguno me puede decir donde me equivoco??

Gracias de antemano
  #2 (permalink)  
Antiguo 29/01/2008, 14:10
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: preparedStatement() no preparado

Ummm, si no le pusiera el valor al query, lo mas normal es que te de un error, asi que es dificil que sea eso. Lo más habitual, salvo bugs en el driver JDBC muy muy raros, es que el query no este devolviendo lo que tu esperas por que no estas haciendo el query que tu crees.

Es decir, lo mas normal es que cuit tenga espacios en blanco o algo que no esperas y que haga que el query no te devuelva el registro que esperas.

Antes existia un driver JDBC que podias poner por debajo de tu driver JDBC para que te "chivara" cuales eran exactamente las consultas que se estaban lanzando a la BDD, valores incluidos, pero creo que ya no se desarrolla. No se si todavia funcionará pero era este:
http://www.p6spy.com/

De todas formas primero comprueba que no hay espacios en blanco ni nada similar y que el query escrito a mano te devuelve lo que tu quieres. Suena tonto pero en la mayoria de cosas, el fallo esta en el lado humano. No sería la primera vez que me pasa a mi.

S!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:22.