Retroceder   Foros del Web > Programación para sitios web > Java y JSP

Respuesta
 
Herramientas Desplegado
Antiguo 29-abr-2008, 08:14   #1 (permalink)
mariuk ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Como consultar a la base de datos a partir de los inputs que rellenes

Hola a todo@s,

Estoy haciendo una aplicación en JSP, y en un formulario tengo 4 opciones de consulta para buscar un CIF, lo puedo hacer consultando a partir del mismo CIF o Nombre o provincia o ciudad. El usuario puede buscar rellenando solo el input de CIF o el CIF + nombre o CIF +nombre + provincia......etc etc....en total seria unas 16 opciones en la que el usuario puede buscar. Y dependiendo el input o los inputs que rellene se hara una busqueda a partir de esos datos en la base de datos (oracle). Me pregunta es: Tengo que hacer 16 condicionales (IF..ELSE) con 16 statement o hay una manera mas facil de hacerlo???

Por favor, darme alguna idea o ejemplo, cualquier cosa sera bien recibido.

Muchisimas gracias de antemano.
mariuk está desconectado   Responder Citando
Antiguo 29-abr-2008, 12:59   #2 (permalink)
ericaadbr está en el buen camino
 
Fecha de Ingreso: enero-2008
Mensajes: 196
Re: Como consultar a la base de datos a partir de los inputs que rellenes

hola mariuk, casualmente esa misma duda la tenia yo hace un par de meses, lo que tienes que hacer es realizar tu consulta de la siguiente manera:

prueba primero, en un manejador gráfico de mysql una consulta que te permita realizar la búsqueda como si todos los parámetros existen.

despues de corroborar que tu sentencia mysql está correcta lo que vas hacer es que un if si en tal input no se encribia entonces esa variable sería igual a "";

el truco está en que mysql cuando encuentra las variables vacias hace el query como extrayendo todos los datos.

no se si me explique bien, pero me hayas entendido.

Saludos y cualquier cosa avisame

Exito
ericaadbr está desconectado   Responder Citando
Antiguo 29-abr-2008, 14:25   #3 (permalink)
rdm
rdm está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 39
Re: Como consultar a la base de datos a partir de los inputs que rellenes

Hola, yo he resuelto este tipo de consultas de la siguiente manera:

Tienes que armar un select que sea dinámico en función de los inputs que deseas utilizar, por ejemplo, dado tres parámetros: edad, sexo y apellido, en un string construyes la primer parte del select, la que no cambia, por ejemplo:

cadSQL = "SELECT * FROM tuTabla WHERE"

luego, en otra cadena irás construyendo el where del select como sigue:

cadWhere =""

if (edad>0) entonces
cadWhere = cadWhere + "edad = " + paramEdad
endif

if (sexo>0) entonces
if (cadWhere= "") entonces
cadWhere = cadWhere + "sexo =" + paramSexo
sino, cadWhere ya tiene contenido, o sea que entró en el if de edad, debes concatenar con un and quedando el anidamiento como sigue:
cadWhere = cadWhere + " AND sexo = " + paramSexo


bueno, con este pseudocódigo ya podrás imaginar como continuar, por último, debes concatenar la primer parte del select guardado en cadSQL con cadWhere y listo, ya tienes un SELECT dinámico que funcionará con todas las opciones de búsquedas que tengas y sus posibles combinaciones.

un último punto, al select final resultante podrás ordenarlo según lo necesites ya que la cadena de ordenamiento (ORDER BY campo1, campo2, campo3) también será fija al igual que la primer parte.

Por último, envias este código al motor de base de datos y lo capturas con un recordset, dataset, etc, etc, lo que estés usando para acumular los datos que devuelve el motor.

La desventaja que podrías observar es que tu tienes que resolver por código el select, pero esto me resulta mas económico que desarrollar "n" posibles procedimientos almacenados según la cantidad de combinaciones posibles.

Saludos y espero que te sirva esta idea.
rdm está desconectado   Responder Citando
Antiguo 30-abr-2008, 04:01   #4 (permalink)
mariuk ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Re: Como consultar a la base de datos a partir de los inputs que rellenes

Hola otra vez, muchas gracias por contestar rapidamente.

ericaadbr, gracias por tu mensaje xo no lo he entendido, quizas porque no soy muy experta en sql.

rdm, hize lo que me dijistes xo no entiendo cuando comentastes:
"Por último, envias este código al motor de base de datos y lo capturas con un recordset, dataset, etc, etc, lo que estés usando para acumular los datos que devuelve el motor."

El problema esta en que no me hace ninguna consulta. Y mi codigo creo q esta bien xo le faltara algo y no se lo q es. Os mando un trozo de mi codigo a ver si me podeis ayudar.

try
{
sConsultaOracle = "select cif, company_name, city, province, zip_code from irm_installers where";

if(sCif!=null && !sCif.equals(""))
{
cadWhere = cadWhere + " cif = '" + sCif + "'";
}
if(sName!=null && !sName.equals(""))
{
if(cadWhere=="")cadWhere = cadWhere + " company_name = '" + sName + "'";
else cadWhere = cadWhere + " and company_name = '" + sName + "'";
}
if(sProvince!=null && !sProvince.equals(""))
{
if(cadWhere=="")cadWhere = cadWhere + " province = '" + sProvince + "'";
else cadWhere = cadWhere + " and province = '" + sProvince + "'";
}
if(sCity!=null && !sCity.equals(""))
{
if(cadWhere=="")cadWhere = cadWhere + " city = '" + sCity + "'";
else cadWhere = cadWhere + " and city = '" + sCity + "'";
}
sConsultaOracle = sConsultaOracle + cadWhere + " order by cif, company_name, province, city";
//creamos el Statement
stmtOracle=connOracle.createStatement();
//ejecutamos la consulta
resOracle=stmtOracle.executeQuery(sConsultaOracle) ;

}
catch( SQLException sqlE )
{
out.println(" Error executing ....... " + sqlE.toString());
bContinue = false;
}
catch( Exception eE )
{
out.println("Unknown exception executing ........<br>" + eE.toString());
bContinue = false;
}
//si todo ha ido bien, seguimos
if(bContinue)
{
//si ha devuelto algun resultado
if(resOracle.next())
{
%>
<table border="0" cellpadding="0" cellspacing="0">
<thead class="fixedHeader">
<tr>
<th width="50">Select</th>
<th width="50">CIF</th>
<th width="75">NAME</th>
<th width="75">CITY</th>
<th width="75">PROVINCE</th>
<th width="75">ZIP CODE</th>
</tr>
</thead>
<tbody class="scrollContent">
<tr>
<td><input name="selectCif" type="radio" value="<%= resOracle.getString("cif")%>"/></td>
<td><%=resOracle.getString("cif")%></td>
<td><%=resOracle.getString("company_name")%></td>
<td><%=resOracle.getString("city")%></td>
<td><%=resOracle.getString("province")%></td>
<td><%=resOracle.getString("zip_code")%></td>
</tr>
<%
}
else //no encontrado NAME comapny con CIF ?
{
out.println("No se ha encontrado instalador con: " + sCif + sName + sProvince + sCity);
bContinue=false;
}

//si existen mas resultados
if(bContinue)
{
.................................................. ..........


Siempre q lo ejecuto me sale: "No se ha encontrado instalador con:......"

Por favor, si podeis ayudarmeeee....muchas gracias de antemano.
mariuk está desconectado   Responder Citando
Antiguo 30-abr-2008, 08:12   #5 (permalink)
Payin ha deshabilitado el karma
 
Avatar de Payin
 
Fecha de Ingreso: mayo-2007
Mensajes: 51
Re: Como consultar a la base de datos a partir de los inputs que rellenes

mariuk, lo que dice Rdm de meter los datos traidos de la BD en un RecordSet o DataSet, es almacenarlo en alguna variable de ese tipo. Comunmente los pones en esos tipos de datos. Sino tambien en variables de tipo List para recorrerlas y luego así iterar sobre las variables para mostrarlas en las JSP o para corroborar ciertos datos en la lógica del negocio en tu backend


disculpa, pero que significa xo ?
Payin está desconectado   Responder Citando
Antiguo 30-abr-2008, 08:33   #6 (permalink)
mariuk ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Re: Como consultar a la base de datos a partir de los inputs que rellenes

Hola Payin,

xo: pero, para escribir menos :p

Entonces, tienes alguna idea sobre mi pequeño gran problema?
mariuk está desconectado   Responder Citando
Antiguo 30-abr-2008, 08:45   #7 (permalink)
rdm
rdm está en el buen camino
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 39
Re: Como consultar a la base de datos a partir de los inputs que rellenes

Hola, tu sintaxis en apariencia está bien y en línea con el pseudocódigo que te proponía, personalmente, yo no manejo oracle pero estoy seguro que debes tener algún objeto en el cual recuperar los datos de una consulta enviada al motor, te recomendaría ver un poco la doc. de oracle ya que allí no puedo ayudarte, por último, pregunto, cuando dices: "...el problema es que no me hace ninguna consulta..., ¿que significa? ¿que no te devuelve ningún registro? si es así, deberías ver bien como se estructura el where según oracle, recuerda que yo te pasé un pseudocódigo a los efectos de comprender el algoritmo, deberías adaptarlo a la sintaxis de tu motor. Espero que puedas avanzar en la resolución de tu problema.

Suerte y saludos.
rdm está desconectado   Responder Citando
Antiguo 30-abr-2008, 11:36   #8 (permalink)
angelo_otromundo ha deshabilitado el karma
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Re: Como consultar a la base de datos a partir de los inputs que rellenes

Hola, no soy un experto pero podria ayudar, puedes verficar lo siguiente:
- Al momento de ejecutar tu aplicacion te marca algun error???
- Verificar que la consulta traiga resultados.
- Imprimir la cadena de la consulta y ejecutarla en oracle, para comprobar la consulta

por el momento es lo unico que se me ocurre...
angelo_otromundo está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Desactivado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 04:05.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93