[英]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.