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;
	}