# Sqlite erreur a l'execution ? (c++)

**URL:** <https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037 "2016-02-21T03:54:07Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037/1 "2016-02-21T03:54:07Z")

</div>

hello

on va déjà donner les information essentiel

sa compile:

```auto
$ make
c++ -lsqlite3 -Wall -Wextra -pedantic -D_FILE_OFFSET_BITS=64 -c -o main.o main.cpp
c++ main.o -o main -lsqlite3 -Wall -Wextra -pedantic -D_FILE_OFFSET_BITS=64
```

la base de donnée contiens des champ int et de type texte.

mai la lecture d’un champ de type text qui est vide (null?) fait planter le programe a l’execution:

```auto
terminate called after throwing an instance of 'std::logic_error'
  what(): basic_string::_S_construct NULL not valid
```

bon j’ai ajouter un fichier. car le code est pas colorer et on vois rien ici (déjà que code comme un …)  
Je trouve pas comment on teste si la valeur est null dans un champs texte (syntaxe ?)  
😊 ![:005](https://www.debian-fr.org/uploads/default/original/1X/cdd45e7dd754015ac5291329b843a2851a0d4fe8.gif "chaud") (la doc sur le site de sqlite sa aide pas vraiment il faut dire…)

Merci d’avance  
[bd\_sqlite.tar](https://www.debian-fr.org/uploads/default/original/2X/e/e29cba7920e2bc53e568d259e24b42bb39ec0e4d.tar) (40 KB)

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037/2 "2016-02-21T03:54:08Z")

</div>

> [@](#):
>
> The sqlite3\_column\_type() routine returns the datatype code for the initial data type of the result column. The returned value is one of SQLITE\_INTEGER, SQLITE\_FLOAT, SQLITE\_TEXT, SQLITE\_BLOB, or SQLITE\_NULL. The value returned by sqlite3\_column\_type() is only meaningful if no type conversions have occurred as described below. After a type conversion, the value returned by sqlite3\_column\_type() is undefined. Future versions of SQLite may change the behavior of sqlite3\_column\_type() following a type conversion.

Sinon, pour ton code lui-même… Ça serait pas mieux de faire une classe autour des fonctions SQLite, plutôt que des variables globales et des fonctions libres ? ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037/3 "2016-02-21T03:54:08Z")

</div>

> [@syam](#):
>
> [quote]The sqlite3\_column\_type() routine returns the datatype code for the initial data type of the result column. The returned value is one of SQLITE\_INTEGER, SQLITE\_FLOAT, SQLITE\_TEXT, SQLITE\_BLOB, or SQLITE\_NULL. The value returned by sqlite3\_column\_type() is only meaningful if no type conversions have occurred as described below. After a type conversion, the value returned by sqlite3\_column\_type() is undefined. Future versions of SQLite may change the behavior of sqlite3\_column\_type() following a type conversion.

Sinon, pour ton code lui-même… Ça serait pas mieux de faire une classe autour des fonctions SQLite, plutôt que des variables globales et des fonctions libres ? ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")[/quote]  
Merci pour ta réponse.  
Pour les classe oui, mai pas dans l’imédia,histoire de comprendre un peux la lib sqlite pour des opération de base. la c est un code simple.  
les classe demande quand même un peux de réflexion si on veux pouvoir les réutiliser plus tard,donc il faut savoir comment y placer les donnée ,héritage,héritage multiple etc:) (enfin d’après le livre que j’ai )

merci pour le texte ,reste a mettre en application ![:006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif "salut")  
p.s t’a trouver sur une page lien ?

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037/4 "2016-02-21T03:54:13Z")

</div>

[quote=«&nbsp;panthere&nbsp;»]Pour les classe oui, mai pas dans l’imédia,histoire de comprendre un peux la lib sqlite pour des opération de base. la c est un code simple.  
les classe demande quand même un peux de réflexion si on veux pouvoir les réutiliser plus tard,donc il faut savoir comment y placer les donnée ,héritage,héritage multiple etc:) (enfin d’après le livre que j’ai )[/quote]  
D’expérience, il suffit de 3 classes pour couvrir quasiment tous les cas d’utilisation :

- une qui englobe les fonctions directement liées à la base de données
- une qui gère les requêtes (exécution SQL, paramètres et résultats)
- une troisième spécialisée pour la gestion des transactions (nécessaire pour que le RAII permette de faire un rollback automatique si on sort du scope sans demander explicitement un commit, par exemple en cas d’exception)

> [@panthere](#):
>
> p.s t’a trouver sur une page lien ?

J’ai juste été voir sur la page d’index de l’API C, histoire de me rafraîchir la mémoire. ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green") [sqlite.org/c3ref/funclist.html](http://www.sqlite.org/c3ref/funclist.html)

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037/5 "2016-02-21T03:54:17Z")

</div>

Merci pour ta réponse 🙂  
Pou les class, je m’y suis mis.

pourquoi en faire 3 ![:108](https://www.debian-fr.org/uploads/default/original/1X/08429d01f54fb389a5bb2c12c142516b8d0fc6ba.gif "adr-ag") une seul pourrait suffire  
les fonction , open,setData,searchX,update,close son public  
les requette son en static dans la partie privée ?

```auto
#ifndef DEF_STAT
#define DEF_STAT
#include <iostream>
#include <string>
#include <sstream>
#include <sqlite3.h>
class cSql {
	public:
	cSql ();

	bool setOpenDatabase(const std::string &)	;
	bool setCreatAllTable () ;

	private:
	int _DataBaseHandle ;
// 7 table relier par une clé mere
	static std::string _RqTCreatePrincipal ;
	static std::string _RqTCreateDroit ;
	static std::string _RqTCreateMd5 ;
	static std::string _RqTCreateUser ;
	static std::string _RqTCreateDate ;
	static std::string _RqTCreateSoftware ;
	static std::string _RqTCreateSave ;

	
};
#endif 
```

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037/6 "2016-02-21T03:54:20Z")

</div>

> [@panthere](#):
>
> pourquoi en faire 3 ![:108](https://www.debian-fr.org/uploads/default/original/1X/08429d01f54fb389a5bb2c12c142516b8d0fc6ba.gif "adr-ag") une seul pourrait suffire

Je te parle de classes pour encapsuler en C++ (presque tout) l’ensemble de l’API SQLite, de manière à ce que ça soit réutilisable. Ta classe telle que tu l’envisages sera totalement inutile dans un autre projet. 😉

Note : après recherche, il semblerait que 2 wrappers avec un design à peu près correct (à vue de nez) soient apparus depuis la dernière fois que j’ai cherché (ce qui remonte à plusieurs années… ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")) :  
[code.google.com/p/sqlite3pp/wiki/UsagePage](https://code.google.com/p/sqlite3pp/wiki/UsagePage) (seul souci : il dépend de boost, ce qui n’est pas toujours souhaitable)  
[wanderinghorse.net/computing/sqlite/](http://wanderinghorse.net/computing/sqlite/)  
Mais je ne sais pas du tout ce qu’ils valent en pratique.

C’est quand même dingue qu’il y ait aussi peu de bons wrappers C++ pour SQLite depuis le temps. Je sais bien que c’est pas bien compliqué à faire soi-même, mais quand même… ![:119](https://www.debian-fr.org/uploads/default/original/1X/0287f377b0e103e172422ffbbe8c639fd3e12c9e.gif "vertige")

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037/7 "2016-02-21T03:54:20Z")

</div>

> [@syam](#):
>
> [quote=«&nbsp;panthere&nbsp;»]pourquoi en faire 3 ![:108](https://www.debian-fr.org/uploads/default/original/1X/08429d01f54fb389a5bb2c12c142516b8d0fc6ba.gif "adr-ag") une seul pourrait suffire

Je te parle de classes pour encapsuler en C++ (presque tout) l’ensemble de l’API SQLite, de manière à ce que ça soit réutilisable. Ta classe telle que tu l’envisages sera totalement inutile dans un autre projet. 😉

Note : après recherche, il semblerait que 2 wrappers avec un design à peu près correct (à vue de nez) soient apparus depuis la dernière fois que j’ai cherché (ce qui remonte à plusieurs années… ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")) :  
[code.google.com/p/sqlite3pp/wiki/UsagePage](https://code.google.com/p/sqlite3pp/wiki/UsagePage) (seul souci : il dépend de boost, ce qui n’est pas toujours souhaitable)  
[wanderinghorse.net/computing/sqlite/](http://wanderinghorse.net/computing/sqlite/)  
Mais je ne sais pas du tout ce qu’ils valent en pratique.

C’est quand même dingue qu’il y ait aussi peu de bons wrappers C++ pour SQLite depuis le temps. Je sais bien que c’est pas bien compliqué à faire soi-même, mais quand même… ![:119](https://www.debian-fr.org/uploads/default/original/1X/0287f377b0e103e172422ffbbe8c639fd3e12c9e.gif "vertige")[/quote]

effectivement ma classe ne sera pas ré-utilisable dans un autre projet mai d’un autre coter faire un wrapper me prendrai trop de temps 😒 (et en plus sa ne sera pas du code propre… car fait par un débutant… ![:pray:](https://www.debian-fr.org/uploads/default/original/1X/2abd93f5bdd4258c1e4775cddd8a93bd8304edc5.gif "Pray") ) mai c est vrai que c est domage car la classe perd un peux de son utiliter qui est de pouvoir ré-utiliser du code plus tard

pas boost est trop lourde pour c eque je veux faire et cette libraire a parfois des incompatibilité entre chaque version du coup ton projet peux avoir des souci de maintenance .. bref pas utile .

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/sqlite-erreur-a-lexecution-c/35037/8 "2016-02-21T03:54:21Z")

</div>

Essaye le deuxième lien, il ne dépend pas de boost et propose deux APIs : une qui renvoie des codes d’erreur et l’autre qui lance des exceptions, ça te laisse le choix.  
Et comme ça tu utiliseras un truc plus propre que l’API C de SQLite.
