SQLite 3 data entry error

Hello,
I am new to the DATABASE.
I am using SQLite 3 database with esp32. I cant able to insert data more than 800 - 900 rows and number of entry changes every time when I restart the ESP32.
I can't find what is the problem.

Sounds like a memory issue, but without the code it’s hard to say.

I created database named BMS1 using sqlite3 browser software.
Database has one table called BMS1_DATA and ID,DATE,VOLT,CURRENT are the column in the table.

Here is my code ,

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <SPI.h>
#include <FS.h>
#include "SD.h" 
hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;


bool first_time = false;
const char* data = "Callback function called";
char *zErrMsg = 0;
int openDb(const char *, sqlite3 **);
int db_exec(sqlite3 *, const char *);
int db__exec(sqlite3 *, const char *);
static int callback(void *data, int argc, char **argv, char **azColName);
static int callback2(void *data, int argc, char **argv, char **azColName);
String date_1 = "DATE = '11-02-2024'";
String id_1 = "ID = 2";
String send_db = "Select * from BMS1_DATA where ID = 1";
//int i = send_db.length();
char send__db [100] ;

String add_db = "insert into BMS1_DATA(ID,DATE , VOLT , CURRENT) values(1,'25-02-2024' , 1 , 1)";
char add__db[100];

String delete_db = "delete from BMS1_DATA where ID = 2";
char delete__db[100];

String BUFF = "";
bool String_complete = false;
char INCOMING_DATA[50];

char DATE[30];

int counter=0;

int ID = 0;
char ID_1[10];

sqlite3 *BMS1_DATA;
int rc;

void IRAM_ATTR onTimer() 
{
  portENTER_CRITICAL_ISR(&timerMux);
  counter++;
  ID++;
//  counter2++;
  portEXIT_CRITICAL_ISR(&timerMux);

}


void setup() {
  Serial.begin(115200);

    timer = timerBegin(0, 80, true); 
    timerAttachInterrupt(timer, &onTimer, true);
    timerAlarmWrite(timer, 500000, true);// time value 
    timerAlarmEnable(timer);

//  Serial.println(send_db);
//  send_db.replace("DATE = '14-02-2024'" , date_1);
//
//  send_db.toCharArray(send__db, sizeof(send__db));

//  Serial.println(send__db);
  Serial.println("START");
  pinMode(1,OUTPUT);
  digitalWrite(1,HIGH);
  digitalWrite(1,LOW);

  
  SPI.begin();
  SD.begin();

  sqlite3_initialize();

//  if(openDb("/sd/BMS1.db", &BMS1_DATA))
//     return;



///////////////////////////////////////////  To inseret data into database  ////////////////////

//  rc = db_exec(BMS1_DATA , "insert into BMS1_DATA(DATE , VOLT , CURRENT) values('15-02-2024' , 50 , 60)");
//  if(rc != SQLITE_OK){
//    sqlite3_close(BMS1_DATA);
//    return;
//  }
//   else
//    Serial.println("New record created");
//
//  rc = db_exec(BMS1_DATA , "Select * from BMS1_DATA");
//  if(rc != SQLITE_OK){
//    sqlite3_close(BMS1_DATA);
//    return;
//  }

/////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////// To read data from the database  ////////////////////////////////

//   rc = db_exec(BMS1_DATA, send__db);
//   if (rc != SQLITE_OK) {
//       sqlite3_close(BMS1_DATA);
//       return;
//   }


//   rc = db_exec(BMS1_DATA, "Select * from BMS1_DATA where DATE = '14-02-2024'");
//   if (rc != SQLITE_OK) {
//       sqlite3_close(BMS1_DATA);
//       return;
//   }


///////////////////////////////////////////////////////////////////////////////////////////////////.

/////////////////////////////////To delete data////////////////////////////////////////

//   rc = db_exec(BMS1_DATA, );
//   if (rc != SQLITE_OK) {
//       sqlite3_close(BMS1_DATA , "delete from BMS_1 where ID = 2");
//       return;
//   }
  
//sqlite3_close(BMS1_DATA);

}

void loop(){

//  Serial.print(BUFF);

      if(counter == 1)
      {
        counter = 0;
        digitalWrite(1,HIGH);
        String WRITE_DATA = "values(1,'25-02-2024' , 1 , 1)";
//        char WRITE__DATA[100];

        itoa(ID,ID_1,10);

        WRITE_DATA.replace("1" , ID_1);
//        Serial.println(WRITE_DATA);
//        Serial.println(ID_1);
        
        
        if(openDb("/sd/BMS1.db", &BMS1_DATA))
                 return;
                 
                add_db.replace("values(1,'25-02-2024' , 1 , 1)", WRITE_DATA);
//                Serial.println(add_db);
            
                add_db.toCharArray(add__db, sizeof(add__db));
              
                  rc = db__exec(BMS1_DATA , add__db);
              if(rc != SQLITE_OK){
                sqlite3_close(BMS1_DATA);
                return;
              }
               else
//                Serial.println("New record created");
            
              rc = db__exec(BMS1_DATA , "Select * from BMS1_DATA");
              if(rc != SQLITE_OK){
                sqlite3_close(BMS1_DATA);
                return;
              }
                sqlite3_close(BMS1_DATA);
                add_db.replace(WRITE_DATA,"values(1,'25-02-2024' , 1 , 1)");
                WRITE_DATA.replace( ID_1 , "1");

            digitalWrite(1,LOW);
      
          }

  BUFF.toCharArray(INCOMING_DATA, sizeof(INCOMING_DATA));
  
  if(String_complete)
  {
    String_complete = false;

//    if(INCOMING_DATA[0] == 'I' && INCOMING_DATA[1] == 'D')
//    {
//    
//
//      delete_db.replace("ID = 2" , BUFF);
//    
//      delete_db.toCharArray(delete__db, sizeof(delete__db));
//    
//    //  Serial.println(BUFF);
//    //  Serial.println(send__db);
//    
//      if(openDb("/sd/BMS1.db", &BMS1_DATA))
//         return;
//    
//           rc = db_exec(BMS1_DATA, delete__db);
//          if (rc != SQLITE_OK) {
//            sqlite3_close(BMS1_DATA);
//            return;
//          }
//    
//       sqlite3_close(BMS1_DATA);
//    
//       send_db.replace(BUFF,"ID = 2");
//      }


      

//    if(INCOMING_DATA[0] == 'v' && INCOMING_DATA[1] == 'a' && INCOMING_DATA[2] == 'l' && INCOMING_DATA[3] == 'u')
//    {

//        if(openDb("/sd/BMS1.db", &BMS1_DATA))
//         return;
//         
//        add_db.replace("values('15-02-2024' , 50 , 60)" , BUFF);
//    
//        add_db.toCharArray(add__db, sizeof(add__db));
//      
//          rc = db__exec(BMS1_DATA , add__db);
//      if(rc != SQLITE_OK){
//        sqlite3_close(BMS1_DATA);
//        return;
//      }
//       else
//        Serial.println("New record created");
//    
//      rc = db__exec(BMS1_DATA , "Select * from BMS1_DATA");
//      if(rc != SQLITE_OK){
//        sqlite3_close(BMS1_DATA);
//        return;
//      }
//        sqlite3_close(BMS1_DATA);
//        add_db.replace(BUFF,"values('15-02-2024' , 50 , 60)");
//        
//    }

    

    if(INCOMING_DATA[0] == 'I' && INCOMING_DATA[1] == 'D')
    {
    

      send_db.replace("ID = 1" , BUFF);
    
      send_db.toCharArray(send__db, sizeof(send__db));
    
    //  Serial.println(BUFF);
    //  Serial.println(send__db);
    
      if(openDb("/sd/BMS1.db", &BMS1_DATA))
         return;
    
           rc = db_exec(BMS1_DATA, send__db);
       if (rc != SQLITE_OK) {
           sqlite3_close(BMS1_DATA);
           return;
       }
    
       sqlite3_close(BMS1_DATA);
    
       send_db.replace(BUFF,"ID = 1");
      }
  }

//delay(1000);

     
  
}

static int callback(void *data, int argc, char **argv, char **azColName) {
  int i;
  if (first_time) {
     Serial.println((const char *) data);
     for (i = 0; i<argc; i++) {
         if (i)
           Serial.print((char) '\t');
         Serial.printf("%s", azColName[i]);
     }
     Serial.printf("\n");
     first_time = false;
  }
  for (i = 0; i<argc; i++) {
    if (i)
      Serial.print((char) '\t');
    Serial.printf("%s", argv[i] ? argv[i] : "NULL");
  }
  Serial.printf("\n");
  return 0;
  }

static int callback2(void *data, int argc, char **argv, char **azColName) {
  int i;
  if (first_time) {
//     Serial.println((const char *) data);
     for (i = 0; i<argc; i++) {
         if (i)
//           Serial.print((char) '\t');
//         Serial.printf("%s", azColName[i]);
//     }
//     Serial.printf("\n");
     first_time = false;
  }
  for (i = 0; i<argc; i++) {
    if (i)
//      Serial.print((char) '\t');
//    Serial.printf("%s", argv[i] ? argv[i] : "NULL");
//  }
//  Serial.printf("\n");
  return 0;
  }
  }
}

int openDb(const char *filename, sqlite3 **db) {
   int rc = sqlite3_open(filename, db);
   if (rc) {
       Serial.printf("Can't open database: %s\n", sqlite3_errmsg(*db));
       return rc;
   } else {
//       Serial.printf("Opened database successfully\n");
   }
   return rc;
}


int db_exec(sqlite3 *db, const char *sql) {
   Serial.println('\n');
   int rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
   if (rc != SQLITE_OK) {
       Serial.printf("SQL error: %s\n", zErrMsg);
       sqlite3_free(zErrMsg);
   } 
   return rc;
}

int db__exec(sqlite3 *db, const char *sql) {
//   Serial.println('\n');
   int rc = sqlite3_exec(db, sql, callback2, (void*)data, &zErrMsg);
   if (rc != SQLITE_OK) {
       Serial.printf("SQL error: %s\n", zErrMsg);
       sqlite3_free(zErrMsg);
   } 
   return rc;
}

void serialEventRun()
{
  while(Serial.available())
  {
    int counter = 0;
    BUFF = Serial.readString();
    String_complete = true;
 }
}