include iostream include unistd include sqlite3 define print_error pdb

  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
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <unistd.h>
#include <sqlite3.h>
#define print_error(pdb) {\
std::cout << "[ERROR]"<< __LINE__ <<\
"(" << sqlite3_errcode(pdb) << "): " <<\
sqlite3_errmsg(pdb) << std::endl;}
bool init_tables(sqlite3 *pdb)
{
const char * user_query =
"CREATE TABLE 'dict' (\n\
'id' INTEGER NOT NULL PRIMARY KEY,\n\
'word' VARCHAR(128) NOT NULL,\n\
'transl' VARCHAR(128) NOT NULL,\n\
'word2' VARCHAR(128) NOT NULL);";
if(sqlite3_exec(pdb, user_query, NULL, NULL, NULL) != SQLITE_OK)
{
print_error(pdb);
return false;
}
return true;
}
bool insert_user(sqlite3 * pdb,
const char * word,
const char * word2,
const char * transl)
{
const char * query =
"INSERT INTO 'dict'\n\
('word', 'word2', 'transl')\n\
VALUES\n\
(?, ?, ?);";
sqlite3_stmt *stmt = NULL; //создается струкрура таблицы
if(sqlite3_prepare_v2(pdb, query, -1, &stmt, NULL) //формирует запрос
!= SQLITE_OK)
{
print_error(pdb);
return false;
}
// sqlite3_bind_int(stmt, 1, id); // пишет int в струкруру
sqlite3_bind_text(stmt, 2, word, -1, NULL);
// пишет в таблицу значение переменной name
sqlite3_bind_text(stmt, 3, word2, -1, NULL); //
sqlite3_bind_text(stmt, 4, transl, -1, NULL);
if(sqlite3_step(stmt) != SQLITE_DONE)
{
print_error(pdb);
sqlite3_finalize(stmt);
return false;
}
sqlite3_finalize(stmt);
return true;
}
bool show_all(sqlite3 *pdb)
{
const char * query =
"SELECT id, word, transl FROM dict ORDER BY RANDOM() LIMIT 1;";
// "SELECT 'user'.'id', 'user'.'name',\n\
'group'.'name', 'user'.'shell'\n\
FROM 'user'\n\
JOIN 'group' ON 'user'.'group_id' = 'group'.'id';";
sqlite3_stmt *stmt = NULL;
sqlite3_prepare_v2(pdb, query, -1, &stmt, NULL);
std::cout << "Id " << "word " << "translit " << std::endl;
while(sqlite3_step(stmt) == SQLITE_ROW)
{
std::cout << sqlite3_column_int(stmt, 0)
<< " | " << sqlite3_column_text(stmt, 1)
<< " | " << sqlite3_column_text(stmt, 2)
<< std::endl;
}
sqlite3_finalize(stmt);
return true;
}
int main(int argc, char** argv)
{
sqlite3 *pdb = NULL;
unlink("DictSql.db"); //удаляет имя и возможно файл, на который оно ссылается
if(sqlite3_open("./DictSql.db", &pdb) != SQLITE_OK) //открывает а если нет то
//создает файл SQl
{
std::cout << sqlite3_errmsg(pdb) << std::endl;
return 1;
}
if(init_tables(pdb) == false)
std::cout << "таблица создана" << std::endl;
return 1;
// test
insert_user(pdb, "bee", "/bin/zsh", "test");
insert_user(pdb, "bee1", "/bin/zsh1", "test1");
insert_user(pdb, "bee2", "/bin/zsh2", "test2");
show_all(pdb);
sqlite3_close(pdb);
return (0);
}