CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

sqlite avec c++

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 13:43:15

:salut:

Je voudrai savoir si ici certains ont réussi à faire fonctionner???

Parce-que je suis allé sur leur site à sqlite et déjà c'est assez mal foutu leur exemple avec un code uniquement en c et de plus, aucun commentaire dans le code.

J'ai essayé d'adapter au c++ mais j'ai des erreurs...

http://www.sqlite.org/quickstart.html
(ça c'est l'exemple sur leur site)

et ça c'est mon code:

  1. include <iostream>
  2. include <string>
  3. include <sqlite3.h>

using namespace std;

static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
int i;
for(i=0; i<argc; i++){
cout << azColName[i] << "=" << (argv[i] ? argv[i] : "NULL") << endl;
}
cout << endl;
return 0;
}

int main(int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;

if( argc!=3 ){
cout << "Usage:" << argv[0] << "DATABASE SQL-STATEMENT\n";
return 1;
}

int rc = sqlite3_open("david.db", &db );
if( rc ){
cout << "Can't open database: \n" << sqlite3_errmsg(db);
sqlite3_close(db);
}

rc = sqlite3_exec(db, "select * from tbl1", callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
cout << "SQL error: \n" << zErrMsg;
}

sqlite3_close(db);

return 0;
}

et j'ai comme erreurs à la compilation:
g++ tables.cpp -o tables
tables.cpp: In function ‘int main(int, char**)’:
tables.cpp:29: erreur: redeclaration of ‘int rc’
tables.cpp:21: erreur: ‘int rc’ previously declared here

chris_27
chris_27
Niveau 10
22 avril 2010 à 14:12:39

Heu... lire le message d'erreur c'est fort hein. :-)))
Et je te conseille :

g++ -Wall -Wextra -pedantic tables.cpp -o tables

histoire de rajouter une louche de Warning parfois bien utiles (et qu'il ne faudrait jamais ignorer).

Sinon, ton problème est à la ligne 29 où il y a un int en trop (comme dit dans le message d'erreur en fait).

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 14:53:09

En essayant ton g++ warnings ça me fait:
tables.cpp:7: attention : unused parameter ‘NotUsed’
tables.cpp: In function ‘int main(int, char**)’:
tables.cpp:29: erreur: redeclaration of ‘int rc’
tables.cpp:21: erreur: ‘int rc’ previously declared here

Donc, la même chose qu'avant sauf pour la première ligne d'erreur.
Je regarde ligne 7 et j'ai:
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {

ps: je savais pour le int en trop mais le soucis c'est que si je l'enlève ça me donne ça:
tables.cpp:7: attention : unused parameter ‘NotUsed’
/tmp/cc0R8z2o.o: In function `main':
tables.cpp:(.text+0x11e): undefined reference to `sqlite3_open'
tables.cpp:(.text+0x133): undefined reference to `sqlite3_errmsg'
tables.cpp:(.text+0x15c): undefined reference to `sqlite3_close'
tables.cpp:(.text+0x17e): undefined reference to `sqlite3_exec'
tables.cpp:(.text+0x1b1): undefined reference to `sqlite3_close'
collect2: ld a retourné 1 code d'état d'exécution

"Heu... lire le message d'erreur c'est fort hein." :d) j'ai pas compris ton allusion.

chris_27
chris_27
Niveau 10
22 avril 2010 à 14:54:55

Bah c'est clair comme message d'erreur (pour moi). Ça veut dire que tu as oublié d'envoyer le fichier objet avec le code de la libraire sqlite3 au linker :d)

g++ -Wall -Wextra -pedantic -lsqlite3 tables.cpp -o tables

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 15:02:50

Ok, là ça marche mieux mais je savais pas qu'il fallait "linker" la librairie vu que je la déclare dans les includes!

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 15:09:33

En fait, je voudrai qu'on m'explique un peu comment tourne le programme car j'ai du mal à saisir là...

je lance le programme (sans rien) juste par son nom et j'ai:
Usage:./tablesDATABASE SQL-STATEMENT (qui se trouve dans mon programme d'ailleurs)

quand je mets: ./tables <nom base> select * from tbl1
il me mets la même chose!

J'ai oublié quelque chose?

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 15:10:14

je signale que ma base existe bien avec comme table tbl1

chris_27
chris_27
Niveau 10
22 avril 2010 à 15:11:20

Dis-toi qu'à chaque include, il faut soit donner un fichier objet (.o,.a,.dll), soit ajouter une option en -lmachin pour le linker.

En vrai, quand tu fais #include <iostream>, il faudrait ajouter un -lstdc++, mais g++ l'ajoute automatiquement celui-là. :-)

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 15:15:13

Ok, je pensais que g++ le faisait automatiquement aussi avec sqlite! :-)

chris_27
chris_27
Niveau 10
22 avril 2010 à 15:21:49

Non, parce que le nom du fichier inclus et le nom qui suit le -l n'ont rien à voir a priori (cf "iostream" et "sdtc++").

Sinon, essaie :
./tables nom_base "select * from tbl1"

PS: tu es sous linux ?

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 15:27:20

Ok, t'avais raison j'ai oublié les "" entre la requête sql. ^^

Sinon, oui je suis sous Linux et aussi maintenant j'ai ce message alors que la table tbl1 existe bien pourtant :(

SQL error:
no such table: tbl1

ps: j'ai remplacé les cout par cerr dans le main. (mais même en changeant le résultat reste le même)

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 16:10:21

Chris :d) c bon, je l'ai fais fonctionner! :-)

:merci: pour tes aiguillages!

il y avait une erreur à la ligne: rc = sqlite3_open(argv[1], &db);

je n'avais pas mis argv[1] mais le nom de ma base dans le code!
Maintenant tout est nickel! :-)))

[[Boubou]]
[[Boubou]]
Niveau 8
22 avril 2010 à 16:12:58

J'ai mis aussi des cerr à la place des cout dans le main...

mais bon apparemment ça marche pareil!

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment