Hello

je tente en c++ de lire une base de donnée , pour ce qui est de ouvrire cree.inserer fermer. il semblerai que j'ai compris. par contre pour ce qui est de la lecture d'un enregistrement sa passe pas a l'execution ??

voici le code , note que des variable globale son là que pour une question de faciliter le code sera par la suite utiliser dans une classe qui va bien

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
 
#include <iostream>
#include <string>
 
#include <sqlite3.h>
 
 
sqlite3_stmt* _pStmt;
sqlite3 *db_handle;
 
const std::string  CreateTableNom="CREATE TABLE NOM (login varchar(30));";
const std::string  InsertLogin="INSERT INTO NOM(login) VALUES(?) ;";
const std::string  SelectNomlogin="SELECT  login from NOM ;";
 
int setOpenBdSql 	(const std::string &);
void setInsert		(const std::string &);
void setCreateTable ();
void getValueNom 	();
void setCloseBd 	();
 
void setCloseDb() {
	if (db_handle != NULL)
	{
		sqlite3_close(db_handle);
		db_handle=NULL;
	}
}
 
int setOpenBdSql (const std::string & dataPath){
	if (db_handle != NULL)
	{
		std::cout << "Veuillez fermer la base de donnée précédante:" << db_handle <<std::endl;
		return 0;
	}
	return  sqlite3_open(dataPath.c_str(), &db_handle);
}
 
void setCreateTable (){
 
	if(sqlite3_prepare_v2(db_handle, CreateTableNom.c_str(), CreateTableNom.length(), &_pStmt, NULL) != SQLITE_OK)
	{
		std::cout <<"Erreur dans la préparation de requette:"  << std::endl;
	}
 
	if (sqlite3_step(_pStmt) == SQLITE_DONE)
	{
	std::cout << "La requete est correctement executé !\n" << sqlite3_sql(_pStmt) << std::endl;
	}
	sqlite3_finalize(_pStmt);
}
 
void setInsert(const std::string & Valeur){
	if(sqlite3_prepare_v2(db_handle, InsertLogin.c_str(), InsertLogin.length(), &_pStmt, NULL) != SQLITE_OK)
	{
		std::cout <<"Erreur dans la préparation de requette:"  << std::endl;
	}
	sqlite3_bind_text(_pStmt, 1, Valeur.c_str(), Valeur.length(), SQLITE_TRANSIENT);
	if (sqlite3_step(_pStmt) == SQLITE_DONE)
	{
	std::cout << "La requete est correctement executé !\n" << sqlite3_sql(_pStmt) << std::endl;
	}
	sqlite3_finalize(_pStmt);
}
void getValueNom(){
	if(sqlite3_prepare_v2(db_handle, SelectNomlogin.c_str(), SelectNomlogin.length(), &_pStmt, NULL) != SQLITE_OK)
	{
		std::cout <<"Erreur dans la préparation de requette:"  << std::endl;
	}
	const unsigned char *s1 =sqlite3_column_text(_pStmt, 0);
	if (sqlite3_step(_pStmt) == SQLITE_DONE)
	{
	std::cout << "La requete est correctement executé !\n" << sqlite3_sql(_pStmt) << std::endl;
	std::cout << "La Valeur :" << s1 << std::endl;
	}
	else
	{
		std::cout << "Erreur  !\n" << sqlite3_sql(_pStmt) << std::endl;
		std::cout << "La Valeur :" << s1 << "\n" << std::endl;
	}
	sqlite3_finalize(_pStmt);
 
}
 
int main()//(int argc, char *argv[])
{
 
		setOpenBdSql("./mebd.sql");// ouverture
		setCreateTable();// creation de la table
		setInsert("Sqlite");// insertion
		getValueNom();//lecture du premier enregistrement Bug ?
		setCloseDb();//fermeture 
 
    return 0;
}
un make file pour ceux que sa interesse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
SRC=$(wildcard *.cpp)
#SRC=main.cpp
OBJ=${SRC:.cpp=.o}
OUT=main
 
CXX=c++
CXXFLAGS=-lsqlite3 -Wall -Wextra -pedantic
#CXXFLAGS=-lsqlite3 -Wall -Wextra -pedantic -static
 
 
all: $(OUT)
 
$(OUT): $(OBJ)
	$(CXX) $^ -o $@ $(CXXFLAGS)
 
.cpp.o:
 
exe: all
	./$(OUT) "sqlite3.sql"
 
clean:
	@rm -v *.o
	true
 
mrproper: clean
	@rm $(OUT)
le tout est coder sous debian squeez 6.0 (linux)
Merci d'avance