Olá, estou com um problema que esta a tirar o meu sono e não estou conseguindo solucionar.
Estou desenvolvendo um sistema de injecao e preciso armazenar o mapa de injecao no meu sqlite. Esses dados vem do bluetooth em json e até ai tudo esta funcionando perfeitamente.
O problema e quando estou inserindo esses dados no sqlite.
Estou executando um for para inserir todos os dados na memoria do proprio esp via SPIFFS.
quando eu executo o seguinte laço de repetição
if (verificaFuncao == 2) {
for (int i = 0; i < 24; i++) {
String iS = String(i);
for (int ii = 0; ii < 5; ii++) {
String iiS = String(ii);
String s_Command = "INSERT INTO tbl_mapaInjecao_sub VALUES (NULL,'" + iS + "' ,'" + iiS + "','3.0');";
const char *c_Command = s_Command.c_str();
rc = db_exec(db1, c_Command);
if (rc != SQLITE_OK) {
sqlite3_close(db1);
return;
}
Serial.println(teste);
Serial.println(ESP.getFreeHeap());
}
}
}
Ele insere todos o dados corretamente e tudo funciona normalmente. tenho uma segunda funcao que utilizo para dar update nessa tabela quando necessário.
String posXS = doc["posX"];
String posYS = doc["posY"];
String valorAtualizaS = doc["valorAtualiza"];
mapaInjecao[posX][posY][0] = valorAtualiza;
Serial.println(mapaInjecao[posX][posY][0]);
String s_Commandd = "UPDATE tbl_mapaInjecao_sub SET value = '" + valorAtualizaS + "' WHERE posX = '" + posXS + "' AND posY='" + posYS + "'";
const char *c_Commandd = s_Commandd.c_str();
rc = db_exec(db1, c_Commandd);
Serial.println(teste);
if (rc != SQLITE_OK) {
sqlite3_close(db1);
return;
}
E tudo funciona normalmente más até um limite de 120 dados. Acima disso não consigo mais inserir nada.
e quando rodo o mesmo codigo no laço for com 25 no i e 15 no ii, o mesmo diz que inseriu os dados, más ao dar o UPDATE ele me retorna o seguinte erro.
20:36:56.336 -> UPDATE tbl_mapaInjecao_sub SET value = '3.8' WHERE posX = '2' AND posY='2'
20:36:56.496 -> SQL error: disk I/O error
Não sei o que esta acontecendo até porque quando consulto o tamanho do arquivo ele me retorna ( 20:33:37.339 -> FILE: /test1.db SIZE: 4096 ) poxa 4kb não é nada para a memória do ESP isso com 120 registros... Vou ter aproximadamente 400 registros... Se resultar em 20kb ainda nao será nada para o ESP. Não sei aonde estou errando, alguem poderia me dar uma luz?
Utilizo este comando para criar a tabela.
rc = db_exec(db1, "CREATE TABLE IF NOT EXISTS tbl_mapaInjecao_sub (id INTEGER PRIMARY KEY, posX INT, posY INT, value FLOAT);");
if (rc != SQLITE_OK) {
sqlite3_close(db1);
return;
}
Obrigado!