如何在 SQlite3 (ESP32 - Arduino IDE) 中插入整数值?

Posted

技术标签:

【中文标题】如何在 SQlite3 (ESP32 - Arduino IDE) 中插入整数值?【英文标题】:How to insert an Integer value in SQlite3 (ESP32 - Arduino IDE)? 【发布时间】:2020-07-25 08:28:55 【问题描述】:

我正在尝试通过 sqlite3 库创建一个应包含 id(自动增量)和整数值的数据库。

现在我无法在 const char sql-query 中插入一个整数值。 我尝试通过 %l 插入,但由于 const char 类型失败。

rc = db_exec(db1, "INSERT INTO test1 VALUES (?, %l)", random(0,200));

这里是完整的代码:

 void setup() 
   Serial.begin(115200);
   sqlite3 *db1;
   int rc;
   SPI.begin();
   SD_MMC.begin();
   sqlite3_initialize();

   if (db_open("/sdcard/test1.db", &db1))
       return;

   //SD_MMC.remove("/test1.db");

   if(SD_MMC.exists("/test1.db"))
    Serial.println("Database exists");
   else
      rc = db_exec(db1, "CREATE TABLE IF NOT EXISTS test1 (id INTEGER PRIMARY KEY, content);");
      if (rc != SQLITE_OK) 
         sqlite3_close(db1);
         return;
      
   

   rc = db_exec(db1, "INSERT INTO test1 VALUES (?, ?)");
   if (rc != SQLITE_OK) 
       sqlite3_close(db1);
       return;
   

   rc = db_exec(db1, "SELECT * FROM test1");
   if (rc != SQLITE_OK) 
       sqlite3_close(db1);
       return;
   

   sqlite3_close(db1);

数据库的执行功能:

int db_exec(sqlite3 *db, const char *sql) 
   Serial.println(sql);
   long start = millis();
   int rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
   if (rc != SQLITE_OK) 
       Serial.printf("SQL error: %s\n", zErrMsg);
       sqlite3_free(zErrMsg);
    else 
       Serial.printf("Operation done successfully\n");
   
   Serial.print(F("Time taken:"));
   Serial.println(millis()-start);
   return rc;

【问题讨论】:

你试过了吗? rc = db_exec(db1, "INSERT INTO test1 VALUES (" + INTEGER + ", " + WHATEVER + ")"); rc = db_exec(db1, "INSERT INTO test1 VALUES (" + 1234 + ", " + 4568 + ")");它返回以下错误:sqlite3_sdmmc_modified:89:62: 错误:'const char*' 和 'const char [3]' 类型的无效操作数到二进制 'operator+' 你可以使用 to string() 操作符吗?也许这有帮助? 问题是,该函数只接受 const char。 String(integer) 不起作用:请参阅上面帖子中的更新功能。 【参考方案1】:

您需要将字符串转换为 const char 数组。示例代码如下,您可以使用此方法添加值。

int Value1 = Function1();
int Value2 = Function2();
String s_Command = "INSERT INTO test1 VALUES ('" + Value1 + "','" + Value2 + "');";
const char *c_Command = s_Command.c_str();
    
rc = db_exec(db1, c_Command);

【讨论】:

以上是关于如何在 SQlite3 (ESP32 - Arduino IDE) 中插入整数值?的主要内容,如果未能解决你的问题,请参考以下文章

esp32如何给外部flash下载程序

esp32如何打开项目配置菜单

esp32 cam如何设置静态的IP

esp32多个例程如何组合

如何在 Lua 中通过 ESP32 和 NodeMCU 使用蓝牙

esp32怎么输出80code