将浮点变量写入sqlite3 db

问题描述 投票:0回答:1

使用浮点变量时,数据库中不会保存任何值。

char *sql = "INSERT INTO Readings (C02, TEMPERATURE, HUMIDITY) VALUES ($co2, $temp, $hum);";
47|||
48|||

当使用值时,浮点值将被输入到数据库中。

char *sql = "INSERT INTO Readings (C02, TEMPERATURE, HUMIDITY) VALUES (833.42, 23.11, 40.25);";
45|833.42|23.11|40.25
46|833.42|23.11|40.25
c sqlite
1个回答
0
投票
int addRec(float co2, float temp, float hum){
    printf("insert");
    sqlite3 *db;
    char *err_msg = 0;
    int rc = sqlite3_open("Data.db", &db); 
    
    if (rc != SQLITE_OK) {
        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);  
        return 1;
    }   
    
    sqlite3_stmt* stmt;
    const char* insertQuery = "INSERT INTO Readings (TIMESTAMP, CO2_PPM, TEMPERATURE, HUMIDITY) VALUES (?, ?, ?, ?)";
    rc = sqlite3_prepare_v2(db, insertQuery, -1, &stmt, NULL);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", err_msg);
        sqlite3_free(err_msg);        
        sqlite3_close(db);
        return 1;

    }   
    
    const char* timeStamp = time_stamp();
    sqlite3_bind_text(stmt, 1, timeStamp,-1,SQLITE_STATIC);
    sqlite3_bind_double(stmt, 2, co2);
    sqlite3_bind_double(stmt, 3, temp);
    sqlite3_bind_double(stmt, 4, hum);
    
    while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
 
    }
    if (rc != SQLITE_DONE) {
        fprintf(stderr, "SQL error: %s\n", err_msg);
        sqlite3_free(err_msg);        
        sqlite3_close(db);
        return 1;

    }
    
    sqlite3_reset(stmt);
    sqlite3_finalize(stmt);
    sqlite3_close(db);
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.