使用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",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等)
解决方法
它没有诀窍:
const char * sql = "INSERT INTO Employees(full_name,data_started) VALUES (?,?)"; time_t time = 0x3DE43B0C; sqlite3_bind_int64(statement,2,time);
以下是documentation的相关部分:
1.2 Date and Time Datatype
sqlite does not have a storage class set aside for storing dates and/or times. Instead,the built-in Date And Time Functions of sqlite are capable of storing dates and times as TEXT,REAL,or INTEGER values:
- TEXT as ISO8601 strings (“YYYY-MM-DD HH:MM:SS.SSS”).
- REAL as Julian day numbers,the number of days since noon in Greenwich on November 24,4714 B.C. according to the proleptic Gregorian calendar.
- INTEGER as Unix Time,the number of seconds since 1970-01-01 00:00:00 UTC.
Applications can chose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.