Sqlite: Как связать и вставить дату из C ++? - PullRequest
5 голосов
/ 25 августа 2011

Использование C ++ (Visual Studio) и sqlite.Как связать дату с параметром?

sqlite3_stmt *statement;

const char *sql = 
    "INSERT INTO employees "
        "(full_name,"
        "date_started)" 
    " VALUES "
        "(@full_name,"
        "@date_started)";

sqlite3_prepare_v2(database_, sql, -1, &statement, NULL);

int parameterIndex = sqlite3_bind_parameter_index(statement, "@full_name");
sqlite3_bind_text(statement, parameterIndex, "John Smith", -1, SQLITE_TRANSIENT);

parameterIndex = sqlite3_bind_parameter_index(statement, "@date_started");

// <??? what goes here ???>
// I want to include the local current time, so I want to know:
// 1. what's the best way to get local time in C++
// 2. and what goes here for the date binding

sqlite3_step(statement);

sqlite3_finalize(statement);

Примечание: я не хочу установить текущее время с помощью sql (например, CURRENT_TIMESTAMP и т. Д.)

Ответы [ 3 ]

8 голосов
/ 26 августа 2011

В этом нет хитрости:

const char * sql =
    "INSERT INTO Employees(full_name, data_started) VALUES (?, ?)";
time_t time = 0x3DE43B0C;
sqlite3_bind_int64(statement, 2, time);

Вот соответствующая часть документации :

1.2 Дата и время Тип данных

SQLite не имеет класса хранения, выделенного для хранения дат и / или времени.Вместо этого встроенные функции даты и времени в SQLite могут сохранять даты и время в виде значений TEXT, REAL или INTEGER:

  • TEXT в виде строк ISO8601 ("YYYY-MM-DD HH:ММ: СС.ссс ").
  • НАСТОЯЩАЯ как числа юлианских дней, количество дней с полудня в Гринвиче 24 ноября 4714 г. до н.э. согласно Григорианскому календарю.
  • INTEGER как Unix Time, количество секунд с 1970-01-01 00:00:00 UTC.

Приложения могут сохранять даты и время в любом из этих форматов и свободно конвертировать между форматами, используя встроенные функции даты и времени.

0 голосов
/ 26 августа 2011

Вот что я понял. Это работает, но я открыт для лучших методов.

time_t rawtime;
struct tm *currentTime;
time ( &rawtime );
currentTime = localtime ( &rawtime );

const int TIME_STRING_LENGTH = 20;
char buffer [TIME_STRING_LENGTH];

// SQLite expected date string format is "YYYY-MM-DD HH:MM:SS" (there are others too)
strftime(buffer, TIME_STRING_LENGTH, "%Y-%m-%d %H:%M:%S", currentTime);
sqlite3_bind_text(statement, parameterIndex, buffer, -1, SQLITE_TRANSIENT);
0 голосов
/ 25 августа 2011

Вы можете получить местное время, используя функцию localtime().

/* localtime example */
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "Current local time and date: %s", asctime (timeinfo) );

  return 0;
}

См. http://www.cplusplus.com/reference/clibrary/ctime/localtime/ для получения подробной информации и примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...