giannino1995 ha scritto:
2.Il ogni caso quando uso insert() e gli altri due metodi posso non chiudere il ResultSet perché di fatto non lo creo, giusto? (vedi codice)
Non l'avevo notato prima ma avevi usato executeQuery() per la INSERT. executeQuery() si usa
solo per quelle query che danno un result-set. Per INSERT/UPDATE/DELETE non si deve usare.
giannino1995 ha scritto:
3.Ho spostato il codice in altre classi ma il metodo connect() l'ho dovuto rinominare come public, non creo problemi di sicurezza?
Se mi parli di "sicurezza" dovresti anche precisare quale ritieni sia il "pericolo". Che qualcuno (dove/da dove?) possa invocare quel metodo public?
Tieni presente una cosa: i dati di accesso sono "in chiaro" in quella classe DBMS (e anche nel .class generato!). Quindi chiunque li vedesse/sapesse, potrebbe accedere comunque al DB anche al di fuori di Java. Quindi non è tanto il metodo "public" il problema.
giannino1995 ha scritto:
4.E' lecito usare executeUpdate() in questo modo?
if(ps.executeUpdate()!=0){
A me funziona perfettamente.
Sì, è lecito. Ma bisogna vedere se ha senso testare o no il numero di righe interessate. Se fai un update sì (mi aspetto che il record ci sia). Se fai un delete, è meno importante (il record potrebbe essere già stato eliminato).
giannino1995 ha scritto:
5.In una webapp reale lasciare tutti i System.out.println() potrebbe essere una cattiva abitudine per la sicurezza?
Dipende dove viene buttato il System.out. Come ho detto, dipende. Dipende dal server e da come è configurato e/o avviato (da una console? dal sistema in background? ecc..).
E dipende ovviamente cosa ci scrivi. Se logghi password o dati "sensibili", sì, ci sono sicuramente questioni di sicurezza.
giannino1995 ha scritto:
Ecco il codice: (Nella webapp importerò tutte le classi in un package a se... non far caso al disordine...)
Giusto alcune note:
1) findByName/findById (il discorso è quasi uguale)
Perché hai usato
while (rs.next()) ? Ha poco senso, mi aspetto 1 record solo.
E se non viene trovato tu ora restituisci un oggetto DBMSUtente ma con i valori di "default". Che è difficile poi da maneggiare, nel senso: come fa il chiamante a capire se quell'oggetto DBMSUtente indica che non è stato trovato? Guarda che il id sia es. 0? Guarda che nome e password siano entrambi null? NO è scomodo!!
if (rs.next()) {
DBMSUtente utente = new DBMSUtente();
// ....
return utente;
} else {
return null; // non trovato!!!
}
Stop, tutto qui.
2) insert
Nel insert ha senso (molto!) ottenere la chiave generata. Altrimenti quale "aggancio" avresti in seguito per fare update o altro dell'utente??
Quindi puoi fare una (o entrambe) delle seguenti cose:
- restituire il id generato
- impostare il id nell'oggetto DBMSUtente che il metodo riceve
3) delete
Il delete sarebbe meglio per id .. non per nome. Questo, in generale.