【发布时间】: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)不起作用:请参阅上面帖子中的更新功能。
标签: c++ c sqlite arduino arduino-esp8266