Newsgroup: it.comp.java
Titolo: help db

ciao a tutti
sto realizzando in jsp un forum,tutto ok a parte il fatto di un problema che
non riesco a risolvere...
se nel corpo del messaggio inserisco apici o virgolette va in errore,percheè
le prende come caratteri speciali o di terminazione stringa(uso sia access
che mysql)
qualcuno sa come risoverlo??non vorrei fare un for prendendo con charAt ogni
singolo carattere e trasformarlo o mettergli uno slash davanti( e anche in
questo caso non so se funziona)
help pleasee
grazie
simo

 questo caso non so se funziona)
No infatti sarebbe sbagliato sia la prima che la seconda proposta! Lo
standard Sql vuole che per esempio, se hai bisogno di inserire un apice nel
testo, tu inserisca un doppio apice; in questo modo il dbms interpreta
quegli apici non come terminatori di istruzione sql ma come carattere apice!
In java puoi risolvere il problem usando il metodo Replaceall dell'oggetto
Stringa;
Stringa prova = new String("Ciao! Dov' è");
prova = prova.replaceAll("'","''"); // visto come replaceAll (" ' "," ' '
");
così in tutta la stringa , sostituirà la presenza di un apice con il doppio
apice
Saluti
Davide Denicolo
davide<at>securityinfos<dot>com
--
=======================
Ciò che l'occhio vede e l'orecchio
sente , la mente crede
=======================

 scrisse :

La cosa migliore da fare è di usare la classe PreparedStatement, che
si occupa di gestire il "problema" apici (e tanti altri). Tu scrivi la
stringa come ti pare e la classe la traduce per te, pronta da dare in
pasto al DB di turno.
Così facendo non ti devi preoccupare, dal codice, in quale DB dovrai
andare a parare... ci pensano i driver!!
Ciao
  P.
Non si mangia per vivere, si vive per mangiare

 ha scritto nel messaggio
news:vm3sg0tk4g3r2cjfr...@4ax.com...

grazie 1000,proverò entrambi i  metodi
simo

 grazie 1000,prover• entrambi i  metodi
Se vuoi andare sul sicuro usa i PreparedStatement, che sono stati 
creati apposta per questo lavoro
Henryx

 Henryx
Scusa potresti essere preciso sui metodi che consentono questo
nell'interfaccia PreparatedStatement?
Grazie
Davide
davide<at>securityinfos<dot>com
--
=======================
Ciň che l'occhio vede e l'orecchio


 nell'interfaccia PreparatedStatement?
<CODE>
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class InserisciDB {
  public int inserisciTab(String valCol) {
    String query;
    PreparedStatement pstmt;
 
    try {
      query = "INSERT INTO tab1 (col1) VALUES (?)";
      pstmt = connDB.prepareStatement(query);
      pstmt.setInt(1, valCol);
      pstmt.executeUpdate();
      pstmt.close();
 
      return 0;
    } catch (SQLException se) {
        return -1;
  }
}
</CODE>
Questo e' il caso di un INSERT. Nel caso di una SELECT l'unica cosa 
che cambia e' che sideve gestire il ResultSet (cosa alquanto 
semplice, visto che e' tale e quale alla gestione che si ha con gli 
Statement)
Henryx

 Henryx
codice d'esempio che ho realizzato:
 connessione = DriverManager.getConnection("jdbc:odbc:utenti");
     /* st = connessione.createStatement();*/
     query = "SELECT * from utenti where username='charlie''";
      pstmt = connessione.prepareStatement(query);
      ResultSet x = pstmt.executeQuery();
      while (x.next()){
        String pippo =x.getString("username");
        System.out.println(pippo);
      }
se esegui questo codice...ti da errore in quanto è presente un apice di
troppo nella stringa Query! E' questo il problema che si deve affrontare e
che comunque il preparedStatement ( a mio avviso ) non mi risolve qui!
                                                                Saluti
Davide
davide<at>securityinfos<dot>com
--
=======================
Ciò che l'occhio vede e l'orecchio
