Originariamente inviato da rsdpzed
ho capito che hai capito perchè non funziona dal commento: usi lo stesso indice per settare i placeholder.
Avevo messo indici fasulli, tanto non avrebbe mai funzionato in quel modo.
Spero di essere stato sufficientemente chiaro.
Sei stato chiaro, ora speriamo di essere riuscito a fare quello che tu suggerivi.
Mi sembra una bella idea la tua, e senza troppi problemi dovrei risolvere la complicazione che si era presentata.
Vediamo ora se sono riuscito a fare quello che tu proponevi.
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;
int titolo, autore, isbn, editore, anno, voto, lingua, prezzo;
//boolean titolo, autore, isbn, editore, anno, voto, lingua, prezzo;
//titolo = autore = isbn = editore = anno = voto = lingua = prezzo = false;
titolo = autore = isbn = editore = anno = voto = lingua = prezzo = -1;
//boolean primo = true;
int cc=1;
if (!connectDatabase()) {
return risultato;
}
try {
for (int i = 0; i < 8; i++) {
if (i == 0 && !((campi[i]).equals(""))) {
titolo = cc++;
//primo = false;
query = "SELECT * FROM libri_table WHERE titolo=?";
} else if (i == 1 && !((campi[i]).equals(""))) {
//autore = true;
autore = cc++;
if (cc==0) {
query = "SELECT * FROM libri_table WHERE autore=?";
} else {
query = query + " AND autore=?";
}
//primo = false;
} else if (i == 2 && !((campi[i]).equals(""))) {
//isbn = true;
isbn= cc++;
if (cc==0) {
query = "SELECT * FROM libri_table WHERE isbn=?";
} else {
query = query + " AND isbn=?";
}
//primo = false;
} else if (i == 3 && !((campi[i]).equals(""))) {
//editore = true;
editore = cc++;
if (cc==0) {
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;
anno=cc++;
if (cc==0) {
query = "SELECT * FROM libri_table WHERE anno=?";
} else {
query = query + " AND anno=?";
}
//primo = false;
} else if (i == 5 && !((campi[i]).equals(""))) {
//voto = true;
voto=cc++;
if (cc==0) {
query = "SELECT * FROM libri_table WHERE voto=?";
} else {
query = query + " AND voto=?";
}
//primo = false;
} else if (i == 6 && !((campi[i]).equals(""))) {
//lingua = true;
lingua=cc++;
if (cc==0) {
query = "SELECT * FROM libri_table WHERE lingua=?";
} else {
query = query + " AND lingua=?";
}
//primo = false;
} else if (i == 7 && !((campi[i]).equals(""))) {
//prezzo = true;
prezzo=cc++;
if (cc==0) {
query = "SELECT * FROM libri_table WHERE prezzo=?";
} else {
query = query + " AND prezzo=?";
}
//primo = false;
}
}
query = query + ";";
PreparedStatement prstmt = con.prepareStatement(query);
if (titolo!=-1) {
prstmt.setString(titolo, campi[0]);
}
if (autore !=-1) {
prstmt.setString(autore, campi[1]);
}
if (isbn !=-1) {
prstmt.setString(isbn, campi[2]);
}
if (editore !=-1) {
prstmt.setString(editore, campi[3]);
}
if (anno !=-1) {
prstmt.setString(anno, campi[4]);
}
if (voto !=-1) {
prstmt.setString(voto, campi[5]);
}
if (lingua !=-1) {
prstmt.setString(lingua, campi[6]);
}
if (prezzo !=-1) {
prstmt.setString(prezzo, campi[7]);
}
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;
}