PDA

View Full Version : [JAVA] apostrofo


antoniod82
08-09-2007, 18:05
in un 'applicazione client/server , dal lato client piglio un campo cognome di tipo stringa da memorizzare in un database in mysql.
Un primo problema riguardava il controllo del testo immesso, che poteva contenere solo lettere, spazi ed eventualmente l'apostrofo. Questo problema č stato risolto vedendo la stringa come un array di char ed applicando a ciauscun character i metodi isLetter(), isWhiteSpace() e controllando che sia ==\'
Ora, un nuovo problema riguarda l'insert della stringa nel database quando questa contenga l'apostrofo: in tal caso, l'apostrofo del cognome viene confuso con l'apostrofo della sintassi sql, generando eccezione in java.

Come posso risolvere il problema in modo che la visualizzazione sia corretta sia in java che in sql?

Grazie. Antonio

orpheus
08-09-2007, 18:58
nomeStringa = nomeStringa.replaceAll("'","\\'");



se non si legge bene č un replaceAll(" ' ", " \\'");

questo ti mette gli escape character di sql per l'apice e sei aposto

PGI-Bis
08-09-2007, 21:55
In teoria se usi un PreparedStatement il driver si occupa poi automaticamente degli escape. Dico in teoria perchč non ricordo pių dove l'ho letto nč ricordo miei tentativi recenti in merito.

antoniod82
09-09-2007, 08:40
nomeStringa = nomeStringa.replaceAll("'","\\'");



se non si legge bene č un replaceAll(" ' ", " \\'");

questo ti mette gli escape character di sql per l'apice e sei aposto

in realtā, facendo cosė,mi restituisce questa stringa (ottenuta con banale println) e quindi quest'eccezione:

INSERT INTO cliente VALUES ('hhhhjjjjkkkkllll', 'D'Anna', 'Luciano', '089816212');

java.sql.SQLException: [MySQL][ODBC 3.51 Driver][mysqld-5.0.19-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Anna', 'Luciano', '089816212')' at line 1

orpheus
09-09-2007, 12:10
Mmmm č successo anche a me pochi giorni fa, osprattutto quando recuperavo il testo da campo di testo tipo text e textarea

per scrupolo prova cosė :


nomeStringa = nomeStringa.replaceAll("\'","\\'");

PGI-Bis
09-09-2007, 12:56
Insisto col PreparedStatement. Se fai una cosa tipo:

PreparedStatement stat = connection.prepareStatement(
"INSERT INTO cliente VALUES (?, ?, ?, ?)");
stat.setString(1, "hhhhjjjjkkkkllll");
stat.setString(2, "D'Anna");
stat.setString(3, "Luciano");
stat.setString(4, "089816212");
stat.executeUpdate();

il driver non si occupa automaticamente e senza problemi della questione virgolette?