gpt4 book ai didi

c - 需要帮助用 C 打开 sqlite3 数据库

转载 作者:行者123 更新时间:2023-11-30 16:28:56 26 4
gpt4 key购买 nike

所以,我并不是一名程序员,但是,我的任务是编写一个程序,该程序将使用 modbus 协议(protocol)轮询指示器,然后将信息记录到数据库中。然而,今天我能够让它工作,试图改进我的代码,并使程序的主要部分(打开 modbus 连接、写入数据库、打开/创建数据库)成为在主程序期间调用的函数。循环中,我在打开数据库时遇到了麻烦。当我调用该函数时,在打开数据库和创建代码的表部分时,当我打印 rc 的值时,我会得到空值。

这是我在尝试清理代码并通过调用函数来完成这一切之前的方式:

int main(int argc, char*argv[]){
sqlite3 *db;
//open database
int rc = sqlite3_open(db_name, &db);
if (rc != SQLITE_OK){
fprintf(stderr, "Cannot open database: %s\n",
sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
char sql_query[1024];
// create sqlite table
snprintf(sql_query,sizeof(sql_query), "CREATE TABLE IF NOT EXISTS %s(%s INTEGER PRIMARY KEY,%s TEXT NOT NULL, %s TEXT NOT NULL, %s TEXT NOT NULL,%s REAL NOT NULL, %s REAL NOT NULL, %s REAL NOT NULL);",tbl_id1,tbl_col1,tbl_col2,tbl_col3,tbl_col4,tbl_col5,tbl_col6,tbl_col7);
rc = sqlite3_exec(db, sql_query, callback, 0, NULL);

if (rc != SQLITE_OK ){
fprintf(stderr, "Failed to select data\n");
fprintf(stderr, "SQL error: %s\n", NULL);

sqlite3_free(NULL);
sqlite3_close(db);

return 1;
}

我这样运行它没有问题,我尝试使用的函数是包含在中的相同代码

void open_Database(db){//sqlite code}

调用函数:

open_Database(db) (same db declared in the main routine)

最佳答案

也许您忽略了一个事实,sqlite3_open() 需要一个指向指向 sqlite3 对象的变量的指针。在原始代码中,您声明了一个指向此类对象的指针,并将该指针的地址提供给了 open 函数。

当你声明一个子函数来完成这项工作时,你还应该给它一个指针:

void open_database (sqlite3 **db)
{
int rc;
rc = sqlite3_open(db_name, db);
// ... now do error checking
}

记住不要在调用 sqlite3_open() 时的 db 参数之前添加取消引用的 & 符号!

关于c - 需要帮助用 C 打开 sqlite3 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52154566/

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