簡體   English   中英

需要幫助在C中打開sqlite3數據庫

[英]Need help opening an sqlite3 database in C

因此,我不是行業程序員,但是,我的任務是使用Modbus協議輪詢指標,然后將信息記錄到數據庫中。 但是,今天我能夠使它正常工作,以嘗試完善我的代碼並使程序的主要部分(打開modbus連接,寫入數據庫,打開/創建數據庫)成為在主過程中要調用的函數。周期,我在打開數據庫時遇到了麻煩。 當我調用該函數時,無論是在數據庫的打開還是在代碼的表部分的創建中,當我打印rc的值時,都會得到null。

這是我嘗試清理代碼並通過調用函數完成所有操作之前的方式:

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參數之前添加取消引用的&符號!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM