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.