0
votes

java.sql.sqlsyntaxerrorexception lors de la tentative de mise à jour d'un champ de chaîne

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 


1 commentaires

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 ()


3 Réponses :


1
votes

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());


4 commentaires

J'ai essayé de les citer, mais obtenez juste une erreur similaire


Les citer ne fonctionnera pas dans ce cas car MessageFormat le verra comme texte littéral. Paretstatement 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 (...).



0
votes

juste une mise à jour utilise double '' au lieu de célibataire ': xxx


0 commentaires

1
votes

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);


0 commentaires