como puedo hacer consultas detalladas en mysql?

mi problema es que al realizar mi segunda consulta me sigue mostrando la misma siendo que estoy utilizando una variable de tipo string donde voy concatenando diferentes strings para realizar una consulta diferente cada que selecciono una checkbox.

mi código es el siguiente:
private void jCheckDulceActionPerformed(java.awt.event.ActionEvent evt) {

if(jCheckDulce.isSelected()){

clik ="`Sabor`='dulce'";
String a = "Si";
String b = "uno";
Bsabor = true;
cajaClikeada(clik,a,b);
}
private void jCheckVerdeActionPerformed(java.awt.event.ActionEvent evt) {

if(jCheckVerde.isSelected()){
clik ="`Color`='verde'";
String a = "Si";
String b = "dos";
Bcolor = true;
cajaClikeada(clik,a,b);
}
// son las checkbox si selecciono la primer casilla me hace una busqueda y si selecciono otra casilla concatena la siguiente busqueda por //que se tratan de categorias o columnas diferentes en mi base de datos

//en este metodo tomo los valores de la checkbox seleccionada y cada categoria la guardo en una pila para ir concatenando el string de la //consulta. tengo muchas checkbox es por ello que tengo varias pilas con diferentes categorias. solo que omiti ponerlas todas para ahorrar //espacio
private void cajaClikeada(String clik, String a, String b){

Stack pilaSabor = new Stack();
Stack pilaColor = new Stack();
Stack pilaUno = new Stack();

if(contador == 0){
pilaUno.push(clik);
}

if(a.equals("Si") && b.equals("uno")){
pilaSabor.push(clik);
}

}
if(a.equals("Si") && b.equals("dos") ){
pilaColor.push(clik);
}
if(a.equals("No") && b.equals("dos") ){
pilaColor.pop();
}

if (contador == 0 && !pilaUno.empty()){
sql = sql2 + pilaUno.pop() ;
}
if(contador > 0 && !pilaSabor.empty() && Bsabor == false){
sql += and + pilaSabor.pop();
}
if(contador > 0 && !pilaTextura.empty() && Btextura == false){
sql += and +pilaTextura.pop();
}
if(contador > 0 && !pilaColor.empty() && Bcolor == false){
sql += and + pilaColor.pop();
}
if(contador > 0 && !pilaCascara.empty() && Bcascara == false){
sql += and + pilaCascara.pop();
}
if(contador > 0 && !pilaSemilla.empty() && Bsemilla == false){
sql += and + pilaSemilla.pop();
}
if(contador > 0 && !pilaTipo.empty() && Btipo == false){
sql += and + pilaTipo.pop();
}
//Si ya habia una opcion seleccionada en la misma categoria
if(contador > 0 && !pilaSabor.empty() && Bsabor == true){
sql += and + pilaSabor.pop();
}

//habilitar el boton y desabilitar las casillas pero si la casilla fue seleccionada desabilitala

for(int i = 0 ; i < arreglo.length ; i++){
arreglo[i].setEnabled(false);
}
jButton1.setEnabled(true);

conexion(sql);

}
private void conexion(String sql){

try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/inteligenciaa","root","manuel");
Statement estado = con.createStatement();
System.out.println("La conexion se ha realizado con exito");
System.out.println(sql);
ResultSet resultado = estado.executeQuery(sql); //aqui es donde esta mi string con los datos concatenados pero solo me realiza //la primer consulta, la segunda si me lo concatena y es el string que deseo pero la consulta que hace es igual a la primera

while(resultado.next()){
salida +="\n"+resultado.getString("Frutas")+"\t\t"+resultado.getString("Sabor")+"\t\t"+resultado.getString("Textura")+
"\t\t"+resultado.getString("Color")+"\t\t"+resultado.getString("Cascara")+"\t\t"+resultado.getString("Semilla")+"\t\t"+resultado.getString("Tipo");

}

jTextArea1.setText(salida);
resultado.close();
}catch(SQLException ex){
System.out.println("Error de MySQL: "+ex.getMessage());
}catch(ClassNotFoundException errr){
errr.printStackTrace();
}catch(Exception err){
System.out.println("Se ha encontrado un error inesperado que es: "+err.getMessage());
}

contador++;

}

mi variable que debe de cambiar es el "string sql" y si lo hace pero al realizar la consulta me lanza la primer consulta que realize y no la del nuevo string. alguien que me pudiece ayudar en donde esta mi error ya imprime el resultado y el string si me aparece tal y como lo quiero, pero no estoy seguro si la variable sql sea del tipo que necesito o al concatenar el nuevo string cambie de tipo. alguna idea? muchas gracias y espero estar en el tema indicado :P

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

para el que le sirva lo que

para el que le sirva lo que pasaba es que no cerraba la conexión a la base de datos. debía de cerrar la conexión a la base de datos y también cerrar así lo entiendo yo .. el flujo de información

resultado.close();
con.close();

Imagen de ingscjoshua

Asi es

Eso es muy comun, aveces olvidamos hacer eso lo que yo te recomendaria es hacer una clase generica que contenga eso metodos, ya implementados y solo le tengas que pasar tu objeto Conexion para que se cierre y no tengas que escribirlo todo el tiempo, si vas a usar jdbc, porque no pruebas usar simple jdbcTempleate de Spring te ahorra mucho trabajo, los RowMappers te ayudan mucho y el manejo de conexiones lo gestiona es decir abre y cierra la conexión