java jeu de résultats.getstring(“nom_colonne”) de la requête
J'ai une simple question concernant ResultSet.getString()
méthode en java JDBC.
Supposons que la valeur dans la colonne de Base de données est d'avoir un \
qui est javas caractère d'échappement par exemple \n
ou \t
etc.
Quand j'ai récupérer la valeur que getString()
j'en vois un de plus du caractère d'échappement est arriver ajoutée et la signification réelle de ce \n
est maintenant un littéral de chaîne seulement.
J'ai donc dû ne pas encoder java et ensuite l'utiliser correctement.
String s= rs.getString("col_name");
Quand s
contient `\n':
System.out.println(s)
de sortie:
\n
Après unescaping java à l'aide d'apache commune StringEscapeUtils
sortie:
System.out.println("hi"+s+"hello");
hi
hello
Ma question est de savoir qui est l'ajout de cette extra \
avant unescaping??
Désolé si c'est une question stupide.
hello\\nworld
lorsque les cheveux. Regarde la façon dont il devrait être.JDBC n'échappe pas à quoi que ce soit dans le
ResultSet
. est la façon dont il devrait être. Sinon, de nombreuses applications ont des problèmes pour savoir ce qui est vraiment dans la DB et de ce que certains arbitraire couche a changé.OriginalL'auteur Anubhab | 2013-04-05
Vous devez vous connecter pour publier un commentaire.
Le pilote JDBC de ne pas échapper à la
ResultSet
. Il serait très mauvais si il n'. Regardez cet exemple simple:La table de base de données
x
ne contenir une colonnevalue
. Il y a deux lignes: l'une avec deux chaîne de caractères ('\'
et'n'
) et une sorcière, une chaîne de caractère (le caractère de saut de ligne). J'ai ajouté une chaîne de caractères de longueur à la sortie de la clarification.Cette table est en lecture avec JDBC:
Vous voyez: pas explicite s'échapper de n'importe où dans le code jusqu'à présent. Et la sortie est:
Vous voyez: Il n'y a encore rien n'a échappé ni par le code de ni par JDBC.
MAIS
Les choses deviennent un peu glauque si vous mélangez dans Java littéraux: Si vous faites quelque chose comme cela:
alors deviner ce qui s'est passé? Vous avez une autre ligne avec un caractère!
C'est parce que le Java compilateur traduit les deux caractères '\n' dans un caractère de saut de ligne. D'où le pilote JDBC de la base de données seulement voir un personnage.
Mais si vous avez lu certains userinput et l'utilisateur aurait tapé
\
etn
alors personne n'aurait de-échapper à ce et la ligne aurait contenu les deux personnages.Prochaine étape
Vous dire, vous n'explicite de s'échapper à l'aide de
StringEscapeUtils
. Alors ce qui allait se passer:StringEscapeUtils
dans une chaîne de caractères contenant l'un des personnages. Après que les deux ligne de ressembler à la même chose de vous.Résumé
Ne pas confondre Chaîne Littérale s'échapper par le compilateur s'échapper par JDBC (ce qui n'arrivera pas).
N'ajoutez pas inutile de s'échapper couches.
Que peut-être, mais est-il pertinent pour la question? La question est à propos de JDBC. Si votre la logique d'affichage qui agit différemment que votre modifier logique ensuite, il est hors de portée de la Q.
Bien..Ma dernière question est de savoir si le jeu de résultats a retour
\` and
n " alors pourquoi ne Syso l'imprime comme\n
pourquoi pas de saut de ligne??Comme déjà dit: Le faites le '\n' de conversion est le compilateur au moment de la compilation, et seulement pour les littéraux de Chaîne. Tout le monde ne touche pas les données. Donc, aussi, de ne pas
System.out.println
au moment de l'exécution.OriginalL'auteur A.H.
getString()
n'échappe pas à quoi que ce soit.Si vous avez un caractère de fin de ligne (à l'écrit comme
"\n"
dans une Java Chaîne littérale, mais un seul caractère dans la chaîne, dont la valeur numérique est de 10) dans la chaîne stockée dans la base de données, puisgetString()
retourne une Chaîne contenant ce caractère. L'impression de cette Chaîne de résultat en deux lignes.Si vous avez un
\
caractère, suivi par unn
personnage (qui devrait donc être écrite comme"\\n"
dans une Java littéral de Chaîne, mais ne se traduirait que par deux caractères dans la chaîne,\
etn
), puisgetString()
retourne une Chaîne contenant ces deux personnages. L'impression de cette Chaîne de résultat dans\n
à être imprimé.En bref,
\n
est utilisé pour être en mesure d'ajouter un caractère de saut de ligne dans une Chaîne littérale, dans le code source Java. Mais, ce qui est traduit par le compilateur pour une Chaîne de caractères contenant un seul caractère de saut de ligne. Pas à une Chaîne de caractères contenant un antislash suivi d'unn
. Au moment de l'exécution, ces séquences d'échappement n'existent plus.J'ai reçu votre point, mais ma question est de savoir qui est l'ajout du supplément `\` alors??
Votre code est probablement de le faire.
Ou la base de données contient en réalité les deux caractères '\' et 'n' qui
StringEscapeUtils
consciencieusement traduit dans le caractère de saut de ligne.OriginalL'auteur JB Nizet