Per questa classe ho preso spunto da un post che ho trovato sul forum...
Si sicodice:import java.sql.*; import javax.swing.*; import com.myapp.Global.*; public class DBMenager { private String nomeDB; private String nomeUtente; private String pwdUtente; private String errore; private Connection db; private boolean connesso; private Statement st; /** Creates a new instance of DBMenager */ public DBMenager(String nomeDB) { this(nomeDB, "", ""); } public DBMenager(String nomeDB, String nomeUtente, String pwdUtente) { this.nomeDB = nomeDB; this.nomeUtente = nomeUtente; this.pwdUtente = pwdUtente; connesso = false; errore = ""; } public boolean Connect() { connesso = false; try { //*********************************** Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); //*********************************** //Class.forName("com.mysql.jdbc.Driver"); if (!nomeDB.equals("")) { if (nomeUtente.equals("")) { //***************con ACCESS************* db = DriverManager.getConnection("jdbc:odbc:"+nomeDB); db.setAutoCommit(true); st=db.createStatement(); //************************ //db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB); } else { if (pwdUtente.equals("")) { db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente); } else { db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente); } } connesso = true; } else { System.exit(0); } } catch (Exception e) { JOptionPane.showMessageDialog(null,"Error dbManager - CONNECT\n\n"+e,"ERRORE ORRORE",JOptionPane.ERROR_MESSAGE); errore = e.getMessage(); } return connesso; } public ResultSet querySelect(String query) { try { ResultSet rs = st.executeQuery(query); return rs; } catch (Exception e) { JOptionPane.showMessageDialog(null,"Error dbManager - querySELECT\n\n"+e,"ERRORE ORRORE",JOptionPane.ERROR_MESSAGE); e.printStackTrace(); errore = e.getMessage(); } return null; } public boolean eseguiAggiornamento(String query) { int numero = 0; boolean risultato = false; try { numero = st.executeUpdate(query); risultato = true; } catch (Exception e) { JOptionPane.showMessageDialog(null,"Error dbManager - eseguiAggiornamento sql\n\n"+e,"ERRORE ORRORE",JOptionPane.ERROR_MESSAGE); e.printStackTrace(); errore = e.getMessage(); risultato = false; } return risultato; } public void disconnetti() { try { db.close(); st.close(); connesso = false; } catch (Exception e) { JOptionPane.showMessageDialog(null,"Error dbManager - CloseConnection\n\n"+e,"ERRORE ORRORE",JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } } public boolean isConnesso() { return connesso; } public String getErrore() { return errore; } public String getDatabaseString(String query) { if (query == null) { return "-"; } StringBuffer temp = new StringBuffer(); int indexFrom = 0; int indexTo = 0; indexTo = query.indexOf("'",indexFrom); while(indexTo>=0) { temp.append(query.substring(indexFrom, indexTo)); temp.append("^"); indexFrom = indexTo; indexTo = query.indexOf("'", ++indexFrom); } temp = temp.append(query.substring(indexFrom, query.length())); for(int i=temp.length()-1; i>=0; i--) { if(temp.charAt(i) =='"') temp.deleteCharAt(i); } return temp.toString(); } }il nome l'ho scelto io perchè avevo già un'altra classe dbMenager realizzata in modo leggermente diverso
![]()
Comunque...il metodo getDatabaseString funziona bene, mi serve solo per evitare l'sql injection più banale laddove l'utente inserice testo nei campi dei form...mi sono abituato ormai a utilizzarla tutte le volte che utilizzo una variabile presa in request e che deve andare nelle condizioni della query. Per provare comunque l'ho tolta e non è cambiato niente...
Una semplice domanda di conferma...secondo te ho fatto bene ad aprire la connessione al db nel costruttore e chiuderla poi alla fine di ogni metodo ???

il nome l'ho scelto io perchè avevo già un'altra classe dbMenager realizzata in modo leggermente diverso
Rispondi quotando