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

Como consultar a la base de datos a partir de los inputs que rellenes

Estas en el tema de Como consultar a la base de datos a partir de los inputs que rellenes en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/04/2008, 08:14
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
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.
  #2 (permalink)  
Antiguo 29/04/2008, 12:59
 
Fecha de Ingreso: enero-2008
Mensajes: 203
Antigüedad: 16 años, 3 meses
Puntos: 1
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
  #3 (permalink)  
Antiguo 29/04/2008, 14:25
rdm
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 57
Antigüedad: 20 años, 5 meses
Puntos: 0
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.
  #4 (permalink)  
Antiguo 30/04/2008, 04:01
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
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.
  #5 (permalink)  
Antiguo 30/04/2008, 08:12
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 16 años, 11 meses
Puntos: 0
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 ?
  #6 (permalink)  
Antiguo 30/04/2008, 08:33
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
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?
  #7 (permalink)  
Antiguo 30/04/2008, 08:45
rdm
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 57
Antigüedad: 20 años, 5 meses
Puntos: 0
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.
  #8 (permalink)  
Antiguo 30/04/2008, 11:36
 
Fecha de Ingreso: abril-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
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...
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 18:02.