Sto realizzando il codice che deve effettuare la ricerca avanzata ma sto avendo un problema abbastanza grande.
Siccome si tratta di un web services, sto utilizzando soap, php e java.
Il problema sta in una parte della funzione della ricerca avanzata in java; infatti, dato che non tutti i campi posso essere riempiti non so come generalizzare la situazione. Prevedere tutte le possibili combinazioni di 8 campi è davvero impossibile.
Il problema, nello specifico, viene fuori quando devo settare i placeholders del prepared statament.
PHP passa un array che contiene sempre qualcosa in tutti i campi, ma se non è stata selezionato nulla per quel campo, mette una stringa vuota.
Java riceve l'array e prepara correttamente la stringa con i placeholders per interrogare il database, ma quando poi devo settare il prepared statament sorgono i problemi, dato che non riesco a trattatare tutte le possibili combinazioni.
Avete qualche idea per risolvere questo problema?
Questa è la funzione
codice:
public String[][] ricercaAvanzata(String[] campi) {
		int numero = 0;
		for(int i=0;i<campi.length;i++) {
			System.out.println("["+i+"]"+campi[i]);
		}
		String query = "";
		String[][] risultato = null;
		boolean titolo, autore, isbn, editore, anno, voto, lingua, prezzo;
		titolo = autore = isbn = editore = anno = voto = lingua = prezzo = false;
		boolean primo = true;
		if (!connectDatabase()) {
			return risultato;
		}		
		try {
			for (int i = 0; i < 8; i++) {
				if (i == 0 && !((campi[i]).equals(""))) {
					titolo = true;
					primo = false;
					query = "SELECT * FROM libri_table WHERE titolo=?";
				} else if (i == 1 && !((campi[i]).equals(""))) {
					autore = true;
					if (primo) {
						query = "SELECT * FROM libri_table WHERE autore=?";
					} else {
						query = query + " AND autore=?";
					}
					primo = false;
				} else if (i == 2 && !((campi[i]).equals(""))) {
					isbn = true;
					if (primo) {
						query = "SELECT * FROM libri_table WHERE isbn=?";
					} else {
						query = query + " AND isbn=?";
					}
					primo = false;
				} else if (i == 3 && !((campi[i]).equals(""))) {
					editore = true;
					if (primo) {
						query = "SELECT * FROM libri_table WHERE casa_editrice=?";
					} else {
						query = query + " AND casa_editrice=?";
					}
					primo = false;
				} else if (i == 4 && !((campi[i]).equals(""))) {
					anno = true;
					if (primo) {
						query = "SELECT * FROM libri_table WHERE anno=?";
					} else {
						query = query + " AND anno=?";
					}
					primo = false;
				} else if (i == 5 && !((campi[i]).equals(""))) {
					voto = true;
					if (primo) {
						query = "SELECT * FROM libri_table WHERE voto=?";
					} else {
						query = query + " AND voto=?";
					}
					primo = false;
				} else if (i == 6 && !((campi[i]).equals(""))) {
					lingua = true;
					if (primo) {
						query = "SELECT * FROM libri_table WHERE lingua=?";
					} else {
						query = query + " AND lingua=?";
					}
					primo = false;
				} else if (i == 7 && !((campi[i]).equals(""))) {
					prezzo = true;
					if (primo) {
						query = "SELECT * FROM libri_table WHERE prezzo=?";
					} else {
						query = query + " AND prezzo=?";
					}
					primo = false;
				}
			}
			query = query + ";";
			PreparedStatement prstmt = con.prepareStatement(query);
                       /* Questa è la parte che ovviamente non funziona */
			if (titolo == true) {
				prstmt.setString(1, campi[0]);
			}
			if (autore == true) {
				prstmt.setString(1, campi[1]);
			}
			if (isbn == true) {
				prstmt.setString(1, campi[2]);
			}
			if (editore == true) {
				prstmt.setString(1, campi[3]);
			}
			if (anno == true) {
				prstmt.setString(1, campi[4]);
			}
			if (voto == true) {
				prstmt.setString(1, campi[5]);
			}
			if (lingua == true) {
				prstmt.setString(1, campi[6]);
			}
			if (prezzo == true) {
				prstmt.setString(1, campi[7]);
			}
                        /* Fino a qui */
			if ((numero = contaLibri(prstmt.toString())) == 0) {
				return risultato;
			}
			risultato = new String[numero][8];
			ResultSet rs = prstmt.executeQuery();
			if (!(rs.next())) {
				System.out.println("Nessun risultato trovato.\n");
				return risultato;
			}
			int i = 0;
			while (rs.next()) {
				// for (int i = 0; i <= numero; i++) {
				if (i < numero) {
					risultato[i][0] = rs.getString("titolo");
					risultato[i][1] = rs.getString("autore");
					risultato[i][2] = rs.getString("anno");
					risultato[i][3] = rs.getString("casa_editrice");
					risultato[i][4] = rs.getString("ISBN");
					risultato[i][5] = rs.getString("prezzo");
					risultato[i][6] = rs.getString("lingua");
					risultato[i][7] = rs.getString("voto");
				}
				i++;
			}
			rs.close();
			prstmt.close();
		} catch (SQLException e) {
			System.out.println("Errore. Impossibile eseguire l'operazione richiesta.\n");
			e.printStackTrace();
			return risultato;
		}
		return risultato;
	}
Grazie per il vostro aiuto.