Pregunta

En la siguiente consulta SQL utilizando la clase 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 veces me apóstrofes y comillas simples y dobles en mis descripciones de los artículos. por ejemplo, mi problema finales con un elemento es un monitor de "Planar 22"". Por supuesto, la cadena fue malinterpretado y pensamos que el valor de descripción era 'Planar 22'. ¿Cuál es la mejor manera de manejar caracteres especiales de una cadena?

He leído que algunas personas están utilizando expresiones regulares, sin embargo, estos parecían ser específicas para una base de caso por caso. Otra forma en que estoy trabajando es en la lectura de la matriz de cadenas de caracteres por carácter. Tenía la esperanza de que hubiera una manera más eficiente y menos recursos para hacer esto.

UPDDATE Después de algunas pruebas más extensas, resulta que había más problemas que ocurren en mi código. También era un problema de codificación URL. Cuando el formulario HTML se estaba poblada por el código JSP, sería tratar de mover el campo de descripción de un formulario en línea, se trunca allí en la forma y no en la consulta. jTDS también corrige el problema de recibir los caracteres especiales. Debido jTDS es un frasco, sino que también ayudó a evitar reiniciar la máquina. Me adjudicará el hilo jTDS la generosidad ya que eso era lo que solía parcialmente.

Gracias de antemano

¿Fue útil?

Solución

Desde que está utilizando PreparedStatement, usted no tiene que hacer nada en absoluto, que será manejado por usted por el controlador JDBC. La única cosa que tienes que tener en cuenta es los caracteres no ASCII, específicamente lo que tiene que asegurarse de que las tablas de datos utilizan una codificación para las columnas de texto que pueden manejar todos los caracteres que se va a utilizar. Pero eso es un problema de SQL, no una cuestión de Java.

Otros consejos

No es necesario para manejar esos caracteres especialmente si usted les está vinculante como parámetros a un PreparedStatement, como lo están haciendo. Esa es una de las principales ventajas del enfoque de declaración preparada.

Al igual que los otros han dicho, no tiene que hacer nada para manejar los caracteres especiales. Es necesario probar un controlador JDBC diferente.

Trate de usar la jTDS controlador y ver si se le ayuda con su PreparedStatement. Se trata de un controlador de base de datos de código abierto para SQL Server. Yo lo uso en el trabajo ahora y funciona como un campeón y en realidad cumple con la especificación JDBC a diferencia del controlador de MS.

Estoy bastante seguro de que el problema no es con el código que envió. Para ayudar a solucionar:

  1. ¿Ha intentado ejecutar el código anterior en un depurador? ¿Cuál es el valor de "ITEMDESCRIPTION" antes de pasarlo a la llamada base de datos?
  2. ¿Cómo estás controlar con precisión el valor en la base de datos? ¿Es esto más el código de Java? O usted está buscando en él con SQLCMD o algo por el estilo?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top