gpt4 book ai didi

c - 在C中向SQLite表添加时间戳

转载 作者:行者123 更新时间:2023-11-30 16:21:58 24 4
gpt4 key购买 nike

我正在尝试将一些代码从 python 迁移到 C。除了向 SQlite3 表添加时间戳之外,一切都很顺利。

这是有效的 Python 代码。

cur.execute("CREATE TABLE IF NOT EXISTS PLCValues(ID INTEGER PRIMARY KEY AUTOINCREMENT, [timestamp] timestamp, \
x001 NUMERIC, x002 NUMERIC, x003 NUMERIC, x004 NUMERIC, x005 NUMERIC, x006 NUMERIC, x007 NUMERIC, x008 NUMERIC,\
y001 NUMERIC, y002 NUMERIC, y003 NUMERIC, y004 NUMERIC, y005 NUMERIC, y006 NUMERIC,\
x201 NUMERIC, x202 NUMERIC, x203 NUMERIC, x204 NUMERIC, x205 NUMERIC, x206 NUMERIC, x207 NUMERIC, x208 NUMERIC,\
df1 REAL, df2 REAL, df3 REAL, df4 REAL)")

cur.execute("INSERT INTO PLCValues VALUES(null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",\
(datetime.now(), \
regs1[0], regs1[1], regs1[2], regs1[3], regs1[4], regs1[5], regs1[6], regs1[7],\
regs2[0], regs2[1], regs2[2], regs2[3], regs2[4], regs2[5],\
regs3[0], regs3[1], regs3[2], regs3[3], regs3[4], regs3[5], regs3[6], regs3[7],\
Temp/10, Humid/10, 0, 0))

在 C 语言中,我必须做一些改变。我的日期代码是 2019-02-10 21:42:06,这是经过批准的格式。

sql = "CREATE TABLE IF NOT EXISTS PLCValues(ID INTEGER PRIMARY KEY AUTOINCREMENT, TEXT DEFAULT CURRENT_TIMESTAMP, \
x001 NUMERIC, x002 NUMERIC, x003 NUMERIC, x004 NUMERIC, x005 NUMERIC, x006 NUMERIC, x007 NUMERIC, x008 NUMERIC,\
x201 NUMERIC, x202 NUMERIC, x203 NUMERIC, x204 NUMERIC, x205 NUMERIC, x206 NUMERIC, x207 NUMERIC, x208 NUMERIC,\
y001 NUMERIC, y002 NUMERIC, y003 NUMERIC, y004 NUMERIC, y005 NUMERIC, y006 NUMERIC,\
df1 REAL, df2 REAL, df3 REAL, df4 REAL)";

rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);


strftime(TimeStamp, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));

snprintf(sql, sizeof(sql), \
"INSERT INTO PLCValues VALUES(%s, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %f, %f, %f, %f)", \
TimeStamp, p.regs1[0], p.regs1[1], p.regs1[2], p.regs1[3], p.regs1[4], p.regs1[5], p.regs1[6], p.regs1[7],\
p.regs2[0], p.regs2[1], p.regs2[2], p.regs2[3], p.regs2[4], p.regs2[5], p.regs2[6], p.regs2[7],\
p.regs3[0], p.regs3[1], p.regs3[2], p.regs3[3], p.regs3[4], p.regs3[5], p.Temp, p.Humid, 0, 0);


int rc = sqlite3_exec(db, sql, 0, 0, &err_msg);

当我运行它时,它卡在时间字符串空间上

SQL 错误:“21”附近:语法错误

我尝试过改变一些事情,但对 SQLite 的经验有限

感谢您的帮助!

最佳答案

这是用于实现此功能的代码。包括时间戳!

char *err_msg = 0;
sqlite3_stmt *res;

//pull current time
char TimeStamp[20];
time_t now = time(NULL);
strftime(TimeStamp, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));
printf("%s\n",TimeStamp);

char *sql = "INSERT INTO PLCValues VALUES(null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

int rc = sqlite3_prepare_v2(db, sql, -1, &res, 0);

if (rc == SQLITE_OK ) {

//Bind the variables
sqlite3_bind_text(res, 1, TimeStamp, -1, SQLITE_TRANSIENT);
sqlite3_bind_int(res, 2, p.regs1[0]);
sqlite3_bind_int(res, 3, p.regs1[1]);
sqlite3_bind_int(res, 4, p.regs1[2]);
sqlite3_bind_int(res, 5, p.regs1[3]);
sqlite3_bind_int(res, 6, p.regs1[4]);
sqlite3_bind_int(res, 7, p.regs1[5]);
sqlite3_bind_int(res, 8, p.regs1[6]);
sqlite3_bind_int(res, 9, p.regs1[7]);

sqlite3_bind_int(res, 10, p.regs2[0]);
sqlite3_bind_int(res, 11, p.regs2[1]);
sqlite3_bind_int(res, 12, p.regs2[2]);
sqlite3_bind_int(res, 13, p.regs2[3]);
sqlite3_bind_int(res, 14, p.regs2[4]);
sqlite3_bind_int(res, 15, p.regs2[5]);

sqlite3_bind_int(res, 16, p.regs3[0]);
sqlite3_bind_int(res, 17, p.regs3[1]);
sqlite3_bind_int(res, 18, p.regs3[2]);
sqlite3_bind_int(res, 19, p.regs3[3]);
sqlite3_bind_int(res, 20, p.regs3[4]);
sqlite3_bind_int(res, 21, p.regs3[5]);
sqlite3_bind_int(res, 22, p.regs3[6]);
sqlite3_bind_int(res, 23, p.regs3[7]);

sqlite3_bind_double(res, 24, p.Temp);
sqlite3_bind_double(res, 25, p.Humid);
sqlite3_bind_double(res, 26, 0);
sqlite3_bind_double(res, 27, 0);

}else{

fprintf(stderr, "Failed to execute statement: %s\n", sqlite3_errmsg(db));
return -1;
}

int step = sqlite3_step(res);

if (step == SQLITE_ROW) {

printf("%s: ", sqlite3_column_text(res, 0));
printf("%s\n", sqlite3_column_text(res, 1));

}

sqlite3_finalize(res);

}

关于c - 在C中向SQLite表添加时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com