Вставить данные в БД SQLite3

282
10 сентября 2017, 01:47

Добрый день. Каким образом происходит запись данных(int, long long, double) в sqlite3?

Собственно с записью значений типа string мне удалось разобраться:

 sqlite3_stmt *stmt;
 sqlite3* db;
 int rc;             // return code
 char *errmsg;       // pointer to an error string
 //open out db
 rc = sqlite3_open(nameDB.c_str(), &db);
 //to answer on our request to open
 char* request_status = 0;

 if (rc != SQLITE_OK) {
     printf("ERROR opening SQLite DB: %s\n", sqlite3_errmsg(db));
     goto out;
 }
 printf("opened SQLite handle successfully.\n");
 //create sql request (create columns)
 statistic_query = "CREATE TABLE IF NOT EXISTS  MY_TABLE(uno, dos, tres)";
 //compiling request  
 sqlite3_prepare_v2(db, statistic_query.c_str(), strlen(statistic_query.c_str()), &stmt, NULL);
 //send sql request to database
 rc = sqlite3_step(stmt);
 //and now create sql request with our data
  statistic_query = "INSERT INTO MY_TABLE(uno, dos, tres) VALUES (string1,sting2, string3);";
  sqlite3_prepare_v2(db, statistic_query.c_str(), strlen(statistic_query.c_str()), &stmt, NULL);
  rc = sqlite3_step(stmt);
         if (rc != SQLITE_DONE)
         {
             printf("ERROR inserting data: %s\n", sqlite3_errmsg(db));
             goto out;
         }
         sqlite3_finalize(stmt);

То есть таким образом можно можно сформировать строку из значений типа string для sql запроса.

Вопрос как в одну строку в БД записать разные значений(1 столбец =int, 2 столбец long long, 3 столбец double).

Для записи различных типов sqlite имеет соответствующие функции:

long long: int sqlite3_bind_int64(sqlite3_stmt*, int, long long int);

double: int sqlite3_bind_double(sqlite3_stmt*, int, double);

int: int sqlite3_bind_int(sqlite3_stmt*, int, int);

Но мне не очень понятно, как с помощью данных функций реализовать мою задачу. (p.s.: так же второй вопрос, каким образом можно задать соответствующие типы ячеек?).

Answer 1

Собственно разобрался, ответ нашел на официальном сайте:

https://sqlite.org/datatype3.html

SQL database engines that use rigid typing will usually try to automatically convert values to the appropriate datatype.

Consider this: CREATE TABLE t1(a INT, b VARCHAR(10));

INSERT INTO t1(a,b) VALUES('123',456);

Rigidly-typed database will convert the string '123' into an integer 123 and the integer 456 into a string '456' prior to doing the insert.

То есть, SQLite автоматически преобразовывает значения при записи и чтении в возможный формат.

И это действительно работает.

READ ALSO
Как через библиотеку SFML реализовать управление персонажем с помощью мышки?

Как через библиотеку SFML реализовать управление персонажем с помощью мышки?

Можете подсказать как реализовать управление персонажем с помощью мышки, как в Action/RPG играх типо Diablo, когда зажав ПКМ и меняя лишь вектор направления...

317
Метод Рунге-Кутты для решения системы ДУ

Метод Рунге-Кутты для решения системы ДУ

Здравствуйте, решаю я систему ДУ первого порядка(это уравнение Лотки-Вальтерры)На самом деле, там вместо чисел должны быть переменные, но я их пока...

347
Не работает nouislider

Не работает nouislider

Почему не работает плагин nouislider на мобилках? те

440
Angular ng-repeat вывод значений в ряд

Angular ng-repeat вывод значений в ряд

Всем приветСтолкнулся с проблемой вывода значений массива обьектов в ряд

281