Considerazioni:
1) Mai creare le istruzioni SQL in quel modo, soprattutto se vi sono clausole WHERE. Si dovrebbero usare i PreparedStatement, per evitare che la stringa SQL ne risulti mal formata a causa di caratteri particolari eventualmente contenuti nelle variabili stringa o a causa dei formati per le date, o a causa di errori poco visibili, ecc.... e questo è quasi certamente il motivo per cui non viene estratto nulla dal tuo DB (vedi più avanti il perchè).
2) Usare dei Vector di Vector mi fa tanta, ma tanta paura... io userei delle strutture dati diverse. Un ArrayList<String[]> se proprio non voglio essere per nulla Object Oriented, altrimenti modellerei una classe che mi rappresenta l'informazione del record e userei un ArrayList di questi oggetti
3) Dentro al ciclo while() stai commettendo il tipico errore di "riutilizzare" lo stesso oggetto... in questo modo il Vector conterrà tanti riferimenti all'ultimo record eventualmente estratto dalla query, perdendo tutti gli altri. L'oggetto "row" va ricreato (con la new) per ogni ciclo del while... meglio se è addirittura dichiarato dentro al while stesso e non fuori, per motivi legati al GC.
Non vedo il trattamento delle eccezioni, quindi mi fido di quel che dici (ovvero: non ci sono eccezioni). Fatti stampare la stringa SQL che verrà eseguita e prova ad eseguirla "a mano" direttamente sul DB. Secondo me è sbagliata quel'istruzione SQL, infatti ci sono degli spazi tra l'apice ed il valore (cosa che avresti evitato se avessi, appunto, usato i PreparedStatement). Vedi qui sotto quello che viene costruito:
codice:
String matricola = "123";
String categoria = "abc";
// Stringa SQL risultante (osserva gli spazi dentro agli apici)
SELECT * FROM prodotti WHERE matricola = ' 123 ' or categoria = ' abc ';
// Forse tu volevi ottenere questa, che è ben diversa
SELECT * FROM prodotti WHERE matricola = '123' or categoria = 'abc';
Se si usano i PreparedStatement, è tutto molto più semplice e si delega al driver JDBC l'onere di fare le cose come si deve:
codice:
String sql = "SELECT * FROM prodotti WHERE matricola = ? or categoria = ?";
PreparedStatement pstmt = con.prepareStatement( sql );
pstmt.setString(1, matricola);
pstmt.setString(2, categoria);
...
Ciao.