Domanda

Nel seguente query SQL utilizzando la classe PreparedStatement:

String query_descrip = "insert into timitemdescription (itemkey, languageid, longdesc, shortdesc) values (?, 1033, ?,?)";
PreparedStatement pstmt2 = con.prepareStatement(query_descrip); 
pstmt2.setInt(1, rs4);
pstmt2.setString(2, itemdescription);
pstmt2.setString(3, itemdescription.substring(0,39));
pstmt2.executeUpdate();       

A volte mi apostrofi e le virgolette singole e doppie nelle mie descrizioni degli articoli. per esempio, il mio problema in ritardo con una voce è un monitor "Planar 22"". Naturalmente, la stringa è stato male interpretato e pensato che il valore di descrizione era solo 'Planar 22'. Qual è il modo migliore per gestire i caratteri speciali in una stringa?

Ho letto che alcune persone stanno usando espressioni regolari, tuttavia questi sembrava di essere specifico per un caso per caso. Un altro modo in cui sto lavorando è la lettura del personaggio array di stringhe per carattere. Speravo ci fosse un modo più efficiente e meno intensivo delle risorse di fare questo.

UPDDATE Dopo un po 'di test approfonditi, si scopre che ci sono stati più problemi che si verificano nel mio codice. è stato anche un problema di codifica URL. Quando il form html veniva popolato dal codice JSP, che avrebbe cercato di spostare il campo di descrizione di un modulo online, si tronca lì sulla forma piuttosto che sulla query. jTDS anche risolto il problema che riceve i caratteri speciali. Poiché jTDS è un vaso, ma anche aiutato evitare il riavvio della macchina. Io assegnerà i jTDS filetto la generosità dal momento che era quello che ho usato in parte.

grazie in anticipo

È stato utile?

Soluzione

Dal momento che si sta utilizzando PreparedStatement, non c'è bisogno di fare nulla a tutti, verrà gestito per voi da parte del driver JDBC. L'unica cosa che si deve guardare fuori per è caratteri non-ASCII, in particolare è necessario assicurarsi che le tabelle del DB utilizzano una codifica per le colonne testuali in grado di gestire tutti i caratteri che si vuole utilizzare. Ma questo è un problema di SQL, non un problema di Java.

Altri suggerimenti

Non è necessario per gestire quei personaggi specialmente se li stai vincolante come parametri a una PreparedStatement, come si sta facendo. Questo è uno dei principali vantaggi dell'approccio preparato comunicato.

Come gli altri hanno detto, non c'è bisogno di fare nulla per gestire i caratteri speciali. Hai bisogno di provare un driver JDBC diversa.

Provare a utilizzare il jTDS conducente e vedere se si aiuta con la vostra PreparedStatement. Si tratta di un driver di database open source per SQL Server. Io lo uso sul posto di lavoro ora e funziona come un campione ed effettivamente conforme alle specifiche JDBC a differenza del conducente MS.

Sono abbastanza certo il problema non è con il codice che avete inviato. Per risolvere:

  1. Hai provato a fare funzionare il frammento di codice di cui sopra in un debugger? Qual è il valore di "itemdescription" prima di passare alla chiamata database?
  2. Come stai in realtà verificando il valore nel database? È questo altro codice Java? Oppure stai guardando con SQLCMD o qualcosa del genere?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top