reemplazar - Java MessageFormat-¿Cómo puedo insertar valores entre comillas simples?
reemplazar comillas en string java (5)
Tengo un problema al usar el objeto java.text.MessageFormat.
Estoy tratando de crear sentencias de inserción de SQL. El problema es cuando hago algo como esto:
MessageFormat messageFormat = "insert into {0} values ( ''{1}'', ''{2}'', ''{3}'', {4} )";
Object[] args = { str0, str1, str2, str3, str4 };
String result = messageFormat.format(args);
Lo entiendo por el valor del result
:
"insert into <str0> values ( {1}, {2}, {3}, <str4> )"
Como puede ver, el problema es que cualquiera de las ubicaciones de destino que están delimitadas por comillas simples no se reemplazan por argumentos. He intentado usar comillas simples dobles como esta: ''''{1}''''
y caracteres escapados como este: /'{1}/'
pero todavía da el mismo resultado.
editar: Olvidé mencionar que también probé ''''''{1}''''''
. El resultado es: "insert into <str0> values ( ''{1}'', ''{2}'', ''{3}'', <str4> )"
. Mantiene las comillas originales pero aún no inserta los valores.
¿Cómo puedo resolver este problema? Para el registro, estoy usando JDK 6u7.
Lo siento si esto está fuera de lugar, pero parece que estás intentando replicar el PreparedStatement que ya está en JDBC.
Si está tratando de crear SQL para ejecutarse en una base de datos, le sugiero que consulte PreparedStatement, ya hace lo que está tratando de hacer (con una sintaxis ligeramente diferente).
Lo siento si esto no es lo que estás haciendo, solo pensé que lo señalaría.
Lo primero que me vino a la mente fue cambiar str1, str2, str3 para tener las comillas simples a su alrededor.
Object[] args = { str0, "''" + str1 + "''", "''" + str2 + "''", "''" + str3 + "''", str4 };
Luego, por supuesto, elimine las comillas simples de su cadena de consulta.
Solo intenté con comillas dobles y funcionó bien para mí:
MessageFormat messageFormat = new MessageFormat("insert into {0} values ( ''''{1}'''', ''''{2}'''', ''''{3}'''', {4} )");
Object[] args = {"000", "111", "222","333","444","555"};
String result = messageFormat.format(args);
El resultado es:
insert into 000 values ( ''111'', ''222'', ''333'', 444 )
¿Esto es lo que necesitas?
Utilice caracteres de comillas simples triples:
MessageFormat messageFormat = "insert into {0} values ( ''''''{1}'''''', ''''''{2}'''''', ''''''{3}'''''', ''''''{4}'''''' )";
Dentro de una cadena , un par de comillas simples se puede utilizar para citar cualquier carácter arbitrario, excepto comillas simples. Por ejemplo, la cadena de patrón
"''{0}''"
representa la cadena"{0}"
, no un FormatElement . Una sola cita en sí misma debe estar representada por comillas dobles duplicadas''''
largo de unaString
. Por ejemplo, la cadena de patrones"''{''''}''"
se interpreta como una secuencia de''{
(inicio de las citas y una llave a la izquierda),''''
(una sola comilla) y}''
(una llave derecha y final de citar), no''{''
y''}''
(llaves crestas izquierda y derecha citadas): representando la cadena"{''}"
, no"{}"
.