Per questa classe ho preso spunto da un post che ho trovato sul forum...
codice:
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();
}
}
Si si
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 ???