· 6 years ago · Apr 19, 2019, 07:56 PM
1#include <iostream>
2#include <sqlite3.h>
3#include <vector>
4#import "constantes.cpp"
5
6using namespace std;
7
8void criaTabelaLivros()
9{
10 sqlite3 *bancoDados;
11 char *erroBanco;
12 int retorno = sqlite3_open(BANCO_DADOS, &bancoDados);
13 string mensagemErro = "Ocorreu um erro ao criar a tabela de livros: ";
14
15 if (retorno) {
16 cerr << "Não foi possÃvel abrir o banco de dados: " << sqlite3_errmsg(bancoDados) << endl;
17 }
18
19 string sql = "CREATE TABLE IF NOT EXISTS livros("
20 "id INT PRIMARY KEY NOT NULL, "
21 "nome TEXT NOT NULL, "
22 "escritor TEXT NOT NULL, "
23 "paginas INT NOT NULL, "
24 "qnt_leitores INT NOT NULL, "
25 "nota REAL NOT NULL, "
26 "genero INT NOT NULL);";
27
28 retorno = sqlite3_exec(bancoDados, sql.c_str(), NULL, 0, &erroBanco);
29
30 if (retorno != SQLITE_OK) {
31 cerr << mensagemErro << sqlite3_errmsg(bancoDados) << endl;
32 sqlite3_free(erroBanco);
33 }
34
35 sqlite3_close(bancoDados);
36}
37
38
39/**
40 * Consulta um livro.
41 * @param id
42 * @return 0 (sucesso) e 1 (erro)
43 */
44int consultaLivro(vector<string> &livros, int id)
45{
46 sqlite3 *bancoDados;
47 sqlite3_stmt *stmt;
48 int retorno = sqlite3_open(BANCO_DADOS, &bancoDados);
49 string mensagemErro = "Ocorreu um erro ao consultar o livro: ";
50
51 if (retorno != SQLITE_OK) {
52 cerr << "Não foi possÃvel abrir o banco de dados: " << sqlite3_errmsg(bancoDados) << endl;
53 sqlite3_finalize(stmt);
54 sqlite3_close(bancoDados);
55
56 return 1;
57 }
58
59 string sql = "SELECT * FROM livros WHERE id = " + to_string(id) + ";";
60 retorno = sqlite3_prepare(bancoDados, sql.c_str(), -1, &stmt, NULL);
61
62 if (retorno != SQLITE_OK) {
63 cerr << mensagemErro << sqlite3_errmsg(bancoDados) << endl;
64 sqlite3_finalize(stmt);
65 sqlite3_close(bancoDados);
66
67 return 1;
68 }
69
70 while(true) {
71 retorno = sqlite3_step(stmt);
72
73 if (retorno == SQLITE_DONE) break;
74
75 if (retorno != SQLITE_ROW) {
76 cerr << mensagemErro << sqlite3_errmsg(bancoDados) << endl;
77 sqlite3_finalize(stmt);
78 sqlite3_close(bancoDados);
79
80 return 1;
81 }
82
83 const char *idLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_ID));
84 const char *nomeLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_NOME));
85 const char *escritorLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_ESCRITOR));
86 const char *paginasLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_PAGINAS));
87 const char *qnt_leitoresLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_QNT_LEITORES));
88 const char *notaLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_NOTA));
89 const char *generoLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_GENERO));
90
91 livros.push_back(idLivros);
92 livros.push_back(nomeLivros);
93 livros.push_back(escritorLivros);
94 livros.push_back(paginasLivros);
95 livros.push_back(qnt_leitoresLivros);
96 livros.push_back(notaLivros);
97 livros.push_back(generoLivros);
98 }
99
100 sqlite3_finalize(stmt);
101 sqlite3_close(bancoDados);
102
103 return 0;
104}
105
106/**
107 * Insere as informacoes de livro.
108 * @param id
109 * @param nome
110 * @param escritor
111 * @param paginas
112 * @param genero
113 * @return 0 (sucesso) e 1 (erro)
114 */
115int insereLivro(int id, string nome, string escritor, int paginas, int genero)
116{
117 sqlite3 *bancoDados;
118 char *erroBanco;
119 int retorno = sqlite3_open(BANCO_DADOS, &bancoDados);
120 string mensagemErro = "Ocorreu um erro ao inserir livros: ";
121
122 if (retorno != SQLITE_OK) {
123 cerr << "Não foi possÃvel abrir o banco de dados: " << sqlite3_errmsg(bancoDados) << endl;
124 sqlite3_close(bancoDados);
125
126 return 1;
127 }
128
129 string sql = "INSERT INTO livros(id, nome, escritor, paginas, 0, 0.0, genero) "
130 "VALUES('" + to_string(id) + "', '" + nome + "', '" + escritor + "', '" + to_string(paginas) + "', '" +
131 to_string(0) + "', '" + to_string(0.0) + "', '" + to_string(genero) +"');";
132 retorno = sqlite3_exec(bancoDados, sql.c_str(), NULL, 0, &erroBanco);
133
134 if (retorno != SQLITE_OK) {
135 cerr << mensagemErro << sqlite3_errmsg(bancoDados) << endl;
136 sqlite3_free(erroBanco);
137 sqlite3_close(bancoDados);
138
139 return 1;
140 }
141
142 sqlite3_close(bancoDados);
143
144 return 0;
145}
146
147int removeLivro(int id)
148{
149 sqlite3 *bancoDados;
150 char *erroBanco;
151 int retorno = sqlite3_open(BANCO_DADOS, &bancoDados);
152 string mensagemErro = "Ocorreu um erro ao remover livros: ";
153
154 if (retorno != SQLITE_OK) {
155 cerr << "Não foi possÃvel abrir o banco de dados: " << sqlite3_errmsg(bancoDados) << endl;
156 sqlite3_close(bancoDados);
157
158 return 1;
159 }
160
161 string sql = "DELETE FROM livros WHERE id = " + to_string(id) + ";";
162
163 retorno = sqlite3_exec(bancoDados, sql.c_str(), NULL, 0, &erroBanco);
164
165 if (retorno != SQLITE_OK) {
166 cerr << mensagemErro << sqlite3_errmsg(bancoDados) << endl;
167 sqlite3_free(erroBanco);
168 sqlite3_close(bancoDados);
169
170 return 1;
171 }
172
173 sqlite3_close(bancoDados);
174
175 return 0;
176}
177
178/**
179 * Lista todos os Livros.
180 * @param livros
181 * @return 0 (sucesso) e 1 (erro)
182 */
183int listaTodosLivros(vector<vector<string> > &livros)
184{
185 sqlite3 *bancoDados;
186 sqlite3_stmt *stmt;
187 int retorno = sqlite3_open(BANCO_DADOS, &bancoDados);
188 string mensagemErro = "Ocorreu um erro ao listar livros: ";
189
190 if (retorno != SQLITE_OK) {
191 cerr << "Não foi possÃvel abrir o banco de dados: " << sqlite3_errmsg(bancoDados) << endl;
192 sqlite3_finalize(stmt);
193 sqlite3_close(bancoDados);
194
195 return 1;
196 }
197
198 string sql = "SELECT * FROM livros;";
199 retorno = sqlite3_prepare(bancoDados, sql.c_str(), -1, &stmt, NULL);
200
201 if (retorno != SQLITE_OK) {
202 cerr << mensagemErro << sqlite3_errmsg(bancoDados) << endl;
203 sqlite3_finalize(stmt);
204 sqlite3_close(bancoDados);
205
206 return 1;
207 }
208
209 while(true) {
210 retorno = sqlite3_step(stmt);
211
212 if (retorno == SQLITE_DONE) break;
213
214 if (retorno != SQLITE_ROW) {
215 cerr << mensagemErro << sqlite3_errmsg(bancoDados) << endl;
216 sqlite3_finalize(stmt);
217 sqlite3_close(bancoDados);
218
219 return 1;
220 }
221
222 const char *idLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_ID));
223 const char *nomeLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_NOME));
224 const char *escritorLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_ESCRITOR));
225 const char *paginasLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_PAGINAS));
226 const char *qnt_leitoresLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_QNT_LEITORES));
227 const char *notaLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_NOTA));
228 const char *generoLivros = reinterpret_cast<const char *>(sqlite3_column_text(stmt, U_GENERO));
229
230 livros.push_back(idLivros);
231 livros.push_back(nomeLivros);
232 livros.push_back(escritorLivros);
233 livros.push_back(paginasLivros);
234 livros.push_back(qnt_leitoresLivros);
235 livros.push_back(notaLivros);
236 livros.push_back(generoLivros);
237
238 livros.push_back(livros);
239 }
240
241 sqlite3_finalize(stmt);
242 sqlite3_close(bancoDados);
243
244 return 0;
245}