You should only prepare the statement once before the loop. The only thing
you should do in the loop itself is bind varying data and call sqlite_step.
There's no need to call prepare, reset, finalize inside the loop. If
chrPrintData doesn't change you can also move bind_blob in front of the
loop.

Mike

-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Im Auftrag von Yang WenYuan
Gesendet: Mittwoch, 9. April 2008 06:08
An: sqlite-users@sqlite.org
Betreff: [sqlite] WinCE Memory Problem

I use the Sqlite in the PDA which is WinCE OS. I need to add more than
200,000 records. I used sqlite3_prepare->
sqlite3_bind_blob->sqlite3_step->sqlite3_finalize to write each record in to
Database. However, I found that after each record is inserted, the PDA
memory became larger and larger. In the end, the whole PDA memory is
occupied by this application and the system halt. Is there any thing I miss
to release the memory?
Following is my code:

sqlite3 *db;
sqlite3_stmt * stat;
char *zErrMsg = 0;
char sqlcmd[ 512 ];
int rc;
char chrBarCode[ 16 ], chrPrintData[ 512 ]; int tagtype;



for( i = 0; i < 2000000; i ++ )
{       
        sprintf( sqlcmd, "INSERT INTO TEST( BARCODE, TAGTYPE, PRINTDATA )
VALUES( %s, %d, ? );", chrBarCode, tagtype );
        
        rc = sqlite3_prepare( db, sqlcmd, -1, &stat, 0 );
        if( rc != SQLITE_OK )
        {
            sqlite3_close(db);
            return -1;
        }
        
        rc = sqlite3_bind_blob( stat, 1, chrPrintData, length, NULL ); 
        if( rc != SQLITE_OK )
        {
            sqlite3_close(db);
            return -1;
        }
        
        rc = sqlite3_step( stat );                      
        if( rc != SQLITE_DONE )
        {
            sqlite3_close(db);
            return -1;
        }
        
        rc = sqlite3_reset( stat );
        if( rc != SQLITE_OK )
        {
            sqlite3_close(db);
            return -1;
        }
        
        rc = sqlite3_finalize( stat );
        if( rc != SQLITE_OK )
        {
            sqlite3_close(db);
            return -1;
        }
        
}


WenYuan



      ______________________________________________________________________
Search, browse and book your hotels and flights through Yahoo! Travel.
http://sg.travel.yahoo.com
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to