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
Grazie per il vostro aiuto.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; }

Rispondi quotando