J'ai ma base de données installée dans phpmyadmin et dans ma requête ci-dessous, j'essaie de mettre à jour un champ de chaîne contenant le chemin de fichier de certains logiciels, par exemple quelque chose comme «C: \ Program Files (X86) \ Kaspersky Lab \ Kaspersky Lab \ Kaspersky Sécurité totale 19.0.0 \ avp.exe '.
Lorsque j'exécute la requête, je reçois la java.sql.sqlsyntaxerorexception comme indiqué ci-dessous. Cette requête fonctionne très bien lorsque vous l'exécutez à PHPMYADMIN elle-même. Qu'est-ce que je fais mal? p>
Ma requête: P>
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '0}, validate=true where category_key = 2' at line 1
3 Réponses :
Utiliser un Paretstatement code> et lier les paramètres; Votre approche actuelle est vulnérable à l'injection SQL. En ignorant cette préoccupation (et c'est une grosse préoccupation), vous ne citez pas vos paramètres. Vous pouvez faire
String query4 = MessageFormat.format(
"UPDATE system_object SET file_path = '{0}', validate='{1}' " +
"where category_key = 2", settings.getAntivirus_filePath(),
settings.isAntivirus_validate());
J'ai essayé de les citer, mais obtenez juste une erreur similaire
Les citer ne fonctionnera pas dans ce cas car MessageFormat code> le verra comme texte littéral.
Paretstatement code> est le moyen d'aller.
Oui, j'ai fini par utiliser des déclarations préparées et ça marche bien maintenant. Merci
C'est-à-dire, supprimez l'appel à MessageFormat du code. Vous faites la reliure de paramétrage de la déclaration à l'aide de MessageFormat, qui n'est tout simplement pas destinée à cette fin. Ce qui est destiné à ce que le but soit préparé est préparé.SetParameter (...).
juste une mise à jour utilise double '' au lieu de célibataire ':
Modifiez votre code à ceci:
String query4 = MessageFormat.format( "UPDATE system_object SET file_path = \"{0}\", validate=\"{1}\" " + "where category_key = 2", "demo1", "demo2"); System.out.println(query4);
Pas sûr, mais il y a un étrange que votre message n'a pas été rempli l'argument. Je suppose qu'il y a quelque chose qui ne va pas avec votre
paramètres.getantivirus_filepath () code>