2016-05-06 7 views
0

Hier ist die Frage:SQL Query Syntaxfehler in C++ Programm, sondern arbeitet in MySQL Workbench

START TRANSACTION; 
SET FOREIGN_KEY_CHECKS = 0; 
SET UNIQUE_CHECKS = 0; 
SET AUTOCOMMIT = 0; 
INSERT INTO n2 (idbin,vertices) VALUES("0",2),("1",2); 
SET UNIQUE_CHECKS = 1; 
SET FOREIGN_KEY_CHECKS = 1; 
COMMIT; 

Die Ausnahme:

MySQL ERR: SQLException in gen_simple_graphs.cc(printSqlException) on line 404 
MySQL ERR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET FOREIGN_KEY_CHECKS = 0;SET UNIQUE_CHECKS = 0;SET AUTOCOMMIT = 0;INSERT INTO ' at line 1 (MySQL error code: 1064, SQLState: 42000) 

Es funktioniert völlig in Ordnung, wenn ich die gleiche Abfrage in MySQL Workbench ausführen. Tatsächlich habe ich die Abfrage auf die Konsole gedruckt, bevor das Programm sie ausführte, genau kopiert und in die Workbench eingefügt, und es lief kein Problem.

Dies ist, wie es direkt von der Konsole aus:

START TRANSACTION;SET FOREIGN_KEY_CHECKS = 0;SET UNIQUE_CHECKS = 0;SET AUTOCOMMIT = 0;INSERT INTO n2 (idbin,vertices) VALUES("0",2),("1",2);SET UNIQUE_CHECKS = 1;SET FOREIGN_KEY_CHECKS = 1;COMMIT; 

Irgendwelche Ideen?

+0

Das ist keine ** a ** -Abfrage, es sind acht Abfragen/Befehle; Je nachdem, wie Sie sich mit dem Server verbinden, können pro "Execute" -Methodenaufruf maximal eine Abfrage/ein Befehl ausgeführt werden. Ich glaube, die MySQL-ODBC-Treiber haben eine Einstellung, ob dies erlaubt wird oder nicht, und verschiedene APIs können ähnliche Einschränkungen haben. – Uueerdo

+0

@Uueerdo Danke! Auf zum nächsten Noob-Fehler! – triggdev

Antwort

0

Das Zeichen ; eine Abfrage beenden, dann bedeutet dies eine neue Anweisung in MySQL WorkBench IDE, aber innerhalb von Abfrage in C++ ist das nicht erlaubt, weil so mehr Abfrage/Anweisung .. und die Sie einen Fehler auslösen.