Добрый день. Каким образом происходит запись данных(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 автоматически преобразовывает значения при записи и чтении в возможный формат.
И это действительно работает.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости