Добрый день. Каким образом происходит запись данных(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.: так же второй вопрос, каким образом можно задать соответствующие типы ячеек?).
Собственно разобрался, ответ нашел на официальном сайте:
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 автоматически преобразовывает значения при записи и чтении в возможный формат.
И это действительно работает.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можете подсказать как реализовать управление персонажем с помощью мышки, как в Action/RPG играх типо Diablo, когда зажав ПКМ и меняя лишь вектор направления...
Здравствуйте, решаю я систему ДУ первого порядка(это уравнение Лотки-Вальтерры)На самом деле, там вместо чисел должны быть переменные, но я их пока...
Всем приветСтолкнулся с проблемой вывода значений массива обьектов в ряд