Now, I change my code as follows, but, the problem is still there. The PDA memory usage become larger and larger. Did I miss something? Anything wrong with my code? Thanks.
sqlcmd = sqlite3_mprintf( "INSERT INTO TEST( BARCODE, TAGTYPE, PRINTDATA ) VALUES( ?, ?, ? );" ); rc = sqlite3_prepare( db, sqlcmd, -1, &stat, 0 ); if( rc != SQLITE_OK ) { sqlite3_free( sqlcmd ); sqlite3_close(db); return -1; } for( i = 0 ; i < 200000; i ++ ) { // ............... // chrBarCode, tagtype and chrPrintData is changed for every loop // ............... rc = sqlite3_bind_text( stat, 1, chrBarCode, strlen( chrBarCode ), NULL ); if( rc != SQLITE_OK ) { sqlite3_free( sqlcmd ); sqlite3_close(db); return -1; } rc = sqlite3_bind_int( stat, 2, tagtype ); if( rc != SQLITE_OK ) { sqlite3_free( sqlcmd ); sqlite3_close(db); return -1; } rc = sqlite3_bind_blob( stat, 3, chrPrintData, length, NULL ); if( rc != SQLITE_OK ) { sqlite3_free( sqlcmd ); sqlite3_close(db); return -1; } rc = sqlite3_step( stat ); if( rc != SQLITE_DONE ) { sqlite3_free( sqlcmd ); sqlite3_close(db); return -1; } rc = sqlite3_reset( stat ); if( rc != SQLITE_OK ) { sqlite3_free( sqlcmd ); sqlite3_close(db); return -1; } } rc = sqlite3_finalize( stat ); if( rc != SQLITE_OK ) { sqlite3_free( sqlcmd ); sqlite3_close(db); return -1; } Best Regards, WenYuan --- Michael Ruck <[EMAIL PROTECTED]> wrote: > No, you only need to create the statement once. And > bind all variables > inside the loop. This at least saves computation > time. Additionally you > should use sqlite3_mprintf instead > of sprintf to protect against sql injection (if that > is an issue for you.) > > You're already doing it with the blob, why not with > the other fields? > > Mike > > > -----Ursprüngliche Nachricht----- > Von: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] Im Auftrag > von Yang WenYuan > Gesendet: Mittwoch, 9. April 2008 08:11 > An: General Discussion of SQLite Database > Betreff: Re: [sqlite] WinCE Memory Problem > > Thanks, Mike. > > Because, each record has different barcode, tagtype, > and printdata. That > means, I need to call: > > sprintf( sqlcmd, "INSERT INTO TEST( BARCODE, > TAGTYPE, PRINTDATA ) VALUES( > %s, %d, ? );", chrBarCode, tagtype ); rc = > sqlite3_prepare( db, sqlcmd, -1, > &stat, 0 ); > > to update the contents of the each records inside > the loop. Am I right? > > Any suggestion? Thanks. > > WenYuan > > > > > > --- Michael Ruck <[EMAIL PROTECTED]> > wrote: > > > 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 > > > > > > > ______________________________________________________________________ > 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 > __________________________________________________________________ Yahoo! Singapore Answers Real people. Real questions. Real answers. Share what you know at http://answers.yahoo.com.sg _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users