J'utilise SQLite (3.6.4) à partir d'une application C ++ (à l'aide de l'API Standard C). Ma question est la suivante: une fois qu'une requête a été préparée, en utilisant La raison est quand quelque chose ne va pas, j'aimerais imprimer la requête (pour le débogage - il s'agit d'une application de test de développeur interne). P> Exemple: P> > sqlite3_prepare_v2 () code> et lié avec des paramètres à l'aide de sqlite3_bind_xyz () code> - y a-t-il un moyen d'obtenir une chaîne contenant l'original Query SQL? sqlite3_prepare_v2(db, "SELECT * FROM xyz WHERE something = ? AND somethingelse = ?", -1, &myQuery, NULL);
sqlite3_bind_text(myQuery, 1, mySomething);
sqlite3_bind_text(myQuery, 2, mySomethingElse);
// ....
// somewhere else, in another function perhaps
if (sqlite3_step(myQuery) != SQLITE_OK)
{
// Here i'd like to print the actual query that failed - but I
// only have the myQuery variable
exit(-1);
}
3 Réponses :
C'était aussi loin que possible d'aller sans trop faire un hack. J'accepte qu'il ne semble pas y avoir une bonne façon de faire ce que je voulais à l'origine.
citant la documentation: p>
dans les interfaces "V2", l'instruction préparée renvoyée (l'objet SQLITE_STMT) contient une copie du texte SQL d'origine. P>
Vous voulez probablement utiliser SQLITE3_TRACE P>
Ceci appellera une fonction de rappel (que vous définissez) et sur les paramètres est un char * de la SQL des énoncés préparés (y compris les paramètres liés). P>