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

Problemas con switch y variables de sesion

Estas en el tema de Problemas con switch y variables de sesion en el foro de Java en Foros del Web. Buenas a todos. Lo que ocurre es que al switch le paso como variable, una variable de sesion que almacena el tipo de busqueda (exacta, ...
  #1 (permalink)  
Antiguo 21/01/2009, 03:31
 
Fecha de Ingreso: marzo-2008
Ubicación: Cádiz, España
Mensajes: 89
Antigüedad: 16 años, 2 meses
Puntos: 0
Problemas con switch y variables de sesion

Buenas a todos. Lo que ocurre es que al switch le paso como variable, una variable de sesion que almacena el tipo de busqueda (exacta, contiene o empieza por).

Este es el código:

Código PHP:
try 
{
        
conexion DriverManager.getConnection(
                
"jdbc:mysql://localhost/cartografia""root",
                
"analiter");
        
Statement st conexion.createStatement();
        switch (
sesion.getAttribute("busqueda"))
        {
            case 
Contiene:
            {
                
System.out.println("Debe de ser Contiene: "+sesion.getAttribute("busqueda"));
                
rs st.executeQuery("select * from mapas m,signaturasoriginales s,materias mat,lugargeosec l,autores a WHERE "
                        
+" m.mapaid=s.mapaid AND "
                        
+" m.materiaid=mat.materiaid AND"
                        
+" m.mapaid=l.mapaid AND"
                        
+" m.mapaid=a.mapaid AND" 
                        
+" m.signatura LIKE '%"
                        
sesion.getAttribute("tematica")
                        + 
"%' OR  s.signaturaoriginal LIKE '%"
                        
sesion.getAttribute("tematica")
                        + 
"%' OR m.lugargeografico LIKE '%"
                        
sesion.getAttribute("geografica")
                        + 
"%' OR l.lugar LIKE '%"
                        
sesion.getAttribute("geografica")
                        + 
"%' OR mat.materia LIKE '%"
                        
sesion.getAttribute("tematica")
                        + 
"%' AND a.autor='"
                        
sesion.getAttribute("autor")
                        + 
"'  OR m.fecha='"
                        
sesion.getAttribute("cronologica")
                        + 
"'");
                                            break;

            }
            case 
Exacta:
            {
                
System.out.println("Debe de ser Exacta: "+sesion.getAttribute("busqueda"));
                
rs st.executeQuery("select * from mapas m,signaturasoriginales s,materias mat,lugargeosec l,autores a WHERE "
                        
+" m.mapaid=s.mapaid AND "
                        
+" m.materiaid=mat.materiaid AND"
                        
+" m.mapaid=l.mapaid AND"
                        
+" m.mapaid=a.mapaid AND"
                        
+" m.signatura='"
                        
sesion.getAttribute("tematica")
                        + 
"' OR s.signaturaoriginal='"
                        
sesion.getAttribute("tematica")
                        + 
"' OR m.lugargeografico='"
                        
sesion.getAttribute("geografica")
                        + 
"' OR l.lugar='"
                        
sesion.getAttribute("geografica")
                        + 
"' OR mat.materia='"
                        
sesion.getAttribute("tematica")
                        + 
"' AND a.autor='"
                        
sesion.getAttribute("autor")
                        + 
"' OR m.fecha='"
                        
sesion.getAttribute("cronologica")
                        + 
"'");
                                          break;
            }
            case 
EmpiezaPor:
            {
                
System.out.println("Debe de ser Empieza Por: "+sesion.getAttribute("busqueda"));
                
rs st.executeQuery("select * from mapas m,signaturasoriginales s,materias mat,lugargeosec l,autores a WHERE "
                        
+" m.mapaid=s.mapaid AND "
                        
+" m.materiaid=mat.materiaid AND"
                        
+" m.mapaid=l.mapaid AND"
                        
+" m.mapaid=a.mapaid AND" 
                        
+" m.signatura LIKE '%"
                        
sesion.getAttribute("tematica")
                        + 
"' OR s.signaturaoriginal LIKE '%"
                        
sesion.getAttribute("tematica")
                        + 
"' OR m.lugargeografico LIKE '%"
                        
sesion.getAttribute("geografica")
                        + 
"' OR l.lugar LIKE '%"
                        
sesion.getAttribute("geografica")
                        + 
"' OR mat.materia LIKE '%"
                        
sesion.getAttribute("tematica")
                        + 
"' AND a.autor='"
                        
sesion.getAttribute("autor")
                        + 
"' OR m.fecha='"
                        
sesion.getAttribute("cronologica")
                        + 
"'");
                                          break;
                
            }
        }
        
        
RowSetDynaClass resultSet = new RowSetDynaClass(rsfalse);
        
request.setAttribute("registros"resultSet);
    }     
    catch (
Exception e
    {
        
out.println("Error de conexion con la base de datos: " e);
    } 
Cuando le damos a buscar, me lanza este error:

Código PHP:
org.apache.jasper.JasperExceptionNo se puede compilar la clase para JSP

Ha tenido lugar un error en la l�nea: 55 en el archivo jsp: /BusquedaEnTablas.jsp
Cannot switch on a value of type ObjectOnly int values or enum constants are permitted
52
:                 "jdbc:mysql://localhost/cartografia""root",
53:                 "analiter");
54:         Statement st conexion.createStatement();
55:         switch (sesion.getAttribute("busqueda"))
56:         {
57:             case Contiene:
58:             { 
Me dice que solo puedo usar valores enteros o enumeraciones. Como lo puedo solucionar????

Lo he probado con if, pero siempre me entra en dos tipos de consultas.
  #2 (permalink)  
Antiguo 21/01/2009, 04:43
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Problemas con switch y variables de sesion

Como te recomienda el mensaje de error, en vez de Strings, utiliza enums:

http://java.sun.com/docs/books/tutor...vaOO/enum.html

S!

PD: De todas formas, si con if te entra en dos condiciones es que las estas poniendo mal.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 21/01/2009, 05:33
 
Fecha de Ingreso: marzo-2008
Ubicación: Cádiz, España
Mensajes: 89
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problemas con switch y variables de sesion

Cita:
Iniciado por GreenEyed Ver Mensaje
Como te recomienda el mensaje de error, en vez de Strings, utiliza enums:

http://java.sun.com/docs/books/tutor...vaOO/enum.html

S!

PD: De todas formas, si con if te entra en dos condiciones es que las estas poniendo mal.
Este es el código pero con los if:
Código PHP:
if (sesion.getAttribute("busqueda").equals("Contiene"))
        {
            
System.out.println("Debe de ser Contiene: "+sesion.getAttribute("busqueda")); 
            
rs st.executeQuery("select * from mapas m,signaturasoriginales s,materias mat,lugargeosec l,autores a WHERE "
                    
+" m.mapaid=s.mapaid AND "
                    
+" m.materiaid=mat.materiaid AND"
                    
+" m.mapaid=l.mapaid AND"
                    
+" m.mapaid=a.mapaid AND" 
                    
+" m.signatura like '%"
                    
sesion.getAttribute("tematica")
                    + 
"%' OR s.signaturaoriginal like '%"
                    
sesion.getAttribute("tematica")
                    + 
"%' OR m.lugargeografico like '%"
                    
sesion.getAttribute("geografica")
                    + 
"%' OR l.lugar like '%"
                    
sesion.getAttribute("geografica")
                    + 
"%' OR mat.materia like '%"
                    
sesion.getAttribute("tematica")
                    + 
"%' OR a.autor='"
                    
sesion.getAttribute("autor")
                    + 
"'  OR m.fecha='"
                    
sesion.getAttribute("cronologica")
                    + 
"'");
        }
        if (
sesion.getAttribute("busqueda").equals("Exacta")) 
        {
            
System.out.println("Debe de ser Exacta: "+sesion.getAttribute("busqueda"));
            
rs st.executeQuery("select * from mapas m,signaturasoriginales s,materias mat,lugargeosec l,autores a WHERE "
                    
+" m.mapaid=s.mapaid AND "
                    
+" m.materiaid=mat.materiaid AND"
                    
+" m.mapaid=l.mapaid AND"
                    
+" m.mapaid=a.mapaid AND"
                    
+" m.signatura='"
                    
sesion.getAttribute("tematica")
                    + 
"' or  s.signaturaoriginal='"
                    
sesion.getAttribute("tematica")
                    + 
"' or m.lugargeografico='"
                    
sesion.getAttribute("geografica")
                    + 
"' or l.lugar='"
                    
sesion.getAttribute("geografica")
                    + 
"' or mat.materia='"
                    
sesion.getAttribute("tematica")
                    + 
"' or a.autor='"
                    
sesion.getAttribute("autor")
                    + 
"' or m.fecha='"
                    
sesion.getAttribute("cronologica")
                    + 
"'");
            
        }
        if (
sesion.getAttribute("busqueda").equals("EmpiezaPor"));
        {
            
System.out.println("Debe de ser Empieza Por: "+sesion.getAttribute("busqueda"));
            
rs st.executeQuery("select * from mapas m,signaturasoriginales s,materias mat,lugargeosec l,autores a WHERE "
                    
+" m.mapaid=s.mapaid AND "
                    
+" m.materiaid=mat.materiaid AND"
                    
+" m.mapaid=l.mapaid AND"
                    
+" m.mapaid=a.mapaid AND" 
                    
+" m.signatura like '%"
                    
sesion.getAttribute("tematica")
                    + 
"' or  s.signaturaoriginal like '%"
                    
sesion.getAttribute("tematica")
                    + 
"' or m.lugargeografico like '%"
                    
sesion.getAttribute("geografica")
                    + 
"' or l.lugar like '%"
                    
sesion.getAttribute("geografica")
                    + 
"' or mat.materia like '%"
                    
sesion.getAttribute("tematica")
                    + 
"' or a.autor='"
                    
sesion.getAttribute("autor")
                    + 
"' or m.fecha='"
                    
sesion.getAttribute("cronologica")
                    + 
"'");
        }
        
RowSetDynaClass resultSet = new RowSetDynaClass(rsfalse);
        
request.setAttribute("registros"resultSet);
    }     
    catch (
Exception e
    {
        
out.println("Error de conexion con la base de datos: " e);
    } 
Si el tipo de busqueda es contiene o exacta, se mete en su if pero tb en el de empiezapor. De ahi los system.out para poder comprobarlo desde el apache.

Por lo que me hace pensar que el problema venga de la página que llama a la búsqueda. Es un formulario con su combo donde se selecciona el tipo de busqueda. Cuando se sa a buscar, se va a otra jsp donde se crean las variables de sesion y de ahi a la página de resultados.

¿Porque puñetas entra en los 2 if????

Última edición por BORJACONIL; 21/01/2009 a las 05:45
  #4 (permalink)  
Antiguo 21/01/2009, 05:51
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Problemas con switch y variables de sesion

¿Será que no las has anidado bien (o mejor dicho, las has anidado cuando no hay que hacerlo)? Por que si haces un if/else if/else if/else, sólo debería entrar en una. Si no es que hay algunas llaves de sobra o así.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 21/01/2009, 10:02
 
Fecha de Ingreso: agosto-2008
Mensajes: 57
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problemas con switch y variables de sesion

Yo comprobaria que recoge en "busqueda" para ver porque te entra en los dos ifs. A mi creo que alguna vez tb me ha pasado algo parecido, y lo solucione jugando con las comparaciones en las condiciones del If, de hecho en una de ellas lo cambie, pero me quede con el gusanillo de porque me entraría en el if si la condicion no era correcta :S
Por cierto para el switch podrias hacer cast en Integer, lo mismo te vale, o si no asignandole un int dependiendo de que opcion se elija(en lo de busqueda..)
1 saludo
  #6 (permalink)  
Antiguo 22/01/2009, 03:03
 
Fecha de Ingreso: marzo-2008
Ubicación: Cádiz, España
Mensajes: 89
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problemas con switch y variables de sesion

Gracias por las respuestas compañeros. Me pongo a intentar solucionarlo. En cuanto lo tenga os lo digo.

Gracias de nuevo.
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 02:48.