Je n'ai pas fait beaucoup de programmation de base de données. Je travaille à partir d'un exemple de code pour l'utilisation de MySQL Connector/C++.Exception mySql Connector (bibliothèque C++ pour mysql) lors de l'insertion d'une ligne dans une table non vide
Lorsque j'exécute le code suivant, je reçois un plantage sur la dernière ligne d'un code std :: string - mais il se bloque UNIQUEMENT lorsque la table n'est pas vide. Si la table est vide, elle insère la ligne et fonctionne correctement. Si la table n'est pas vide, elle se bloque. Je suis assez confus. Y at-il quelque chose que je fais mal avec la clé primaire ou les autres valeurs? (les noms de colonne ont été modifiés ici, mais sinon le code est verbatim)
Lorsque je regarde la variable dans le code du modèle std :: string (le peu que je peux voir), je ne vois aucune valeur familière de données que j'essayais d'insérer - donc ce n'était aucune aide du tout. Je vois quelque chose comme "HY000" comme une valeur de chaîne, mais je ne suis pas certain d'où cela vient.
Initialement, je pensais que ce pourrait être la chaîne de date, mais le code fonctionne très bien avec une table vide, puis se bloque lorsqu'il n'est pas vide. Cela indique que la chaîne de date fonctionne bien.
prep_stmt = con->prepareStatement("INSERT INTO
sometable(val1, val2, val3, Date, val5, val6, val7)
VALUES (?, ?, ?, ?, ?, ?, ?)");
/*
`idLicenses` INT NOT NULL ,
`val1` VARCHAR(45) NOT NULL ,
`val2` INT NOT NULL ,
`val3` INT ZEROFILL NULL ,
`Date` DATETIME NOT NULL ,
`val5` VARCHAR(45) NOT NULL ,
`val6` VARCHAR(45) NOT NULL ,
`val7` VARCHAR(45) NOT NULL ,
*/
// val1, val5, val6 and val7 are std::strings, val2 and val3 are ints.
prep_stmt->setString(1, val1);
prep_stmt->setInt(2, val2);
prep_stmt->setInt(3, 0);
prep_stmt->setDateTime(4, /* I created some date string here*/);
prep_stmt->setString(5, val5);
prep_stmt->setString(6, val6);
prep_stmt->setString(7, val7);
prep_stmt->execute();
C'est sur une plate-forme MS en utilisant Visual Studio 2008.
La base de données est en cours d'exécution et je peux utiliser d'autres outils de requête de base de données pour voir les tableaux, etc.
EDIT:
Je vois regarder l'exception mysql que je reçois:
"Utilisation de type tampon non pris en charge: 4191960 (paramètre: 3)" err pas 2036
EDIT:
Je ne suis pas sûr que la réponse acceptée est exactement la bonne réponse, mais il m'a aidé à trouver une solution. Fondamentalement j'ai enlevé tous les attributs non-nulles, a enlevé le remplissage zéro et ai placé la clé primaire à l'auto-incrémentation. Maintenant, ça marche bien
Pouvez-vous publier des déclarations de variables pour val1, etc. Aussi, ressemble à une faute de frappe pour vale1. – zooropa
Je suppose que le "vale1" (etc) ne faisait pas partie de son code actuel, mais qu'il était juste en train de cacher ses noms de colonnes réels du monde. :) – Dolph
Oui - juste cacher les vraies valeurs. le code compile et s'exécute. Les ints sont ints et les chaînes de caractères sont std :: strings. – Tim