saraciao ha scritto:
volevo chiedervi se questa query per le recensioni è corretta
No, purtroppo le parti di SQL inserite nelle stringhe NON sono corrette.
Si vede ad esempio:
......, A.dataRecensione" + "from RecensioneHotel .......
Quando la stringa viene composta tu ottieni
......, A.dataRecensionefrom RecensioneHotel .......
che ovviamente è sbagliato come sintassi. Quando si compone del SQL in questo modo bisogna essere attentissimi agli spazi, virgole, ecc...
Inoltre nel SQL hai "aperto" due parentesi tonde (e tra l'altro la prima NON serve affatto) che poi NON "chiudi":
String url="(SELECT A.nomeHotel, .......
and exists(select * "
queste parentesi non le hai chiuse!!
Poi nelle query hai usato 1 "?" ma nel PreparedStatement setti 2 parametri. E il secondo "?" dove va messo??
No, devi prima provare "a mano" le query con un tool di query (anche grafico) per il tuo DB, poi le trasporti in Java.
Riguardo la parte più Java, ci sono diverse cose che non vanno:
1) catturare SQLException e poi restituire null è poco appropriato. C'è ben poco che possono fare questi metodi (a parte al limite "loggare" l'eccezione). Meglio far USCIRE fuori una eccezione da questi metodi.
Hai la scelta: o fai uscire direttamente il SQLException ma è "checked" e quindi deve essere presa in considerazione altrove ... oppure definisci una tua eccezione "unchecked" che incapsula il SQLException in modo almeno da non dover obbligare a dichiarare/gestire troppo le eccezioni.
2) Hai fatto il executeQuery ed ottenuto il ResultSet ma poi devi ancora scansionarlo ed estrarre i dati.
3) Hai come tipo di ritorno dei ArrayList<String> ma le query tirano fuori 4 colonne. Quindi cosa vuoi fare? Cosa tiri fuori dai metodi? Una lista di stringhe che contiene cosa??
4) Il ResultSet e il PreparedStatement dovresti SEMPRE chiuderli. Quindi serve usare appropriatamente il costrutto try-finally
Insomma, è tutto da rivedere e scrivere più accuratamente.