Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/01/2008, 14:39
GreenEyed
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: consulta a bd con multiples parametros

Cita:
Iniciado por ericaadbr Ver Mensaje
pues realmente no me agrada mucho la idea de tener que hacer muchas sentencias ya que serian demasiadas, la cosa esta en que no se concatenar, como es???,
¿Demasiadas? ¿De cuantas posibilidades estamos hablando? Lo normal es que no sean muchas por que si no suena a que la funcion esta siendo demasiado genérica... aunque a veces sea necesario.

Concantenar... pues no tiene ningun "secreto" aparte de una programación cuidadosa y tener en cuenta todos los casos posibles. Lo malo que tiene la concatenación es que la depuración suele ser más engorrosa.

Yo lo que suelo hacer en estos casos es hacer varios StringBuilders (StringBuffers si hablamos de Java < 5), uno para el select(opcional si no es un *), otro para el from y otro para el where (a veces uno extra para el order by) y usar condicionales para concatenar usando por ejemplo Sets.
Un ejemplo, aunque hay multiples formas de hacerlo
Cita:
// Primero determinas los elementos para construir
StringBuilder selectClause = new StringBuilder("SELECT ");
Set camposSelect = new LinkedHashSet();
StringBuilder fromClause = new StringBuilder(" FROM ");
Set tablasFrom= new LinkedHashSet();
StringBuilder whereClause = new StringBuilder(" WHERE ");
Set condicionesWhere= new LinkedHashSet();

if(paramIdX !=null)
{
camposSelect.add("NOMBRE_X");
tablasFrom.add("TABLA_X");
condicionesWhere.add("ID_X='" + paramIdX + "'");
}
...
// Y al final recorres los Set y concatenas
Object[] campos = camposSelect.toArray();
for(int i = 0;i<campos.length;i++)
{
if(i>0)
{
selectClause.append(", ");
}
selectClause.append(campos[i]);
}
... igual con el from y el where
// Y al final to clausula es concatenar el select
// con el from y el where
...
Yo incluso cuando lo hago, en vez de usar concantenacion para las comparaciones("ID_X='" + paramIdX + "'") uso PreparedStament asi que pongo interrogantes y luego pongo los valores etc. Pero es aun más complicado así que no lo voy a poner .

Con eso ya es una idea, es pura algorítmica de concatenar Strings, conjuntos etc.
S!