change SQLITE_STATIC to SQLITE_TRANSIENT

2014-05-04



smartenc



发件人:lyx <sdu...@163.com>
发送时间:2014-05-04 13:11
主题:[sqlite] sqlite3_bind_text issue
收件人:"sqlite-users"<sqlite-users@sqlite.org>
抄送:

Hi Experts, 
I'm trying to use sqlite3_bind_text in my database insert procedure using 
sqlite 3.8.4.3. I have a very simple table and the '.schema' output is as 
following: 



sqlite> .schema 

CREATE TABLE ins_test(col1 text, col2 text, col3 text, col4 text, col5 text, 
col6 text); 

CREATE INDEX idx_ins_test on ins_test(col1, col2, col3); 




I want to insert the following data into ins_test table. 

col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col6000000000
 

col1000000001|col2000000001|col3000000001|col4000000001|col5000000001|col6000000001
 

col1000000002|col2000000002|col3000000002|col4000000002|col5000000002|col6000000002
 

... 

So I wrote a program to insert the test data. Since the sql statement is not 
changing and we only need to change the insert value of the insert statement. I 
plan to use sqlite3_bind_text. The core program is as following. Please check 
if there is anything wrong in my code. 

    rc = sqlite3_open(argv[1], &db); 

    if (rc != SQLITE_OK) 

    { 

        printf ("Error call sqlite3_open function, return value is [%d]. Error 
message is [%s]\n", rc, sqlite3_errmsg(db)); 

        sqlite3_close(db); 

        return -1; 

    } 

    sprintf (sql_str, "insert into ins_test values (?,?,?,?,?,?)"); 

  

    if (SQLITE_OK != (rc = sqlite3_prepare_v2(db, sql_str, -1, &stmt, NULL))) 

    { 

        printf ("sqlite3_prepare_v2 error code is [%d]", rc); 

        sqlite3_close(db); 

        return -1; 

    } 

  

    for (i = 0; i < 100000000; i++) 

    { 

        memset (tmp_str, 0, sizeof(tmp_str)); 

        sprintf (tmp_str, "col1%09d", i); 

        sqlite3_bind_text (stmt, 1, tmp_str, -1, SQLITE_STATIC); 

        

        memset (tmp_str, 0, sizeof(tmp_str)); 

        sprintf (tmp_str, "col2%09d", i); 

        sqlite3_bind_text (stmt, 2, tmp_str, -1, SQLITE_STATIC); 

        

        memset (tmp_str, 0, sizeof(tmp_str)); 

        sprintf (tmp_str, "col3%09d", i); 

        sqlite3_bind_text (stmt, 3, tmp_str, -1, SQLITE_STATIC); 

        

        memset (tmp_str, 0, sizeof(tmp_str)); 

        sprintf (tmp_str, "col4%09d", i); 

        sqlite3_bind_text (stmt, 4, tmp_str, -1, SQLITE_STATIC); 

        

        memset (tmp_str, 0, sizeof(tmp_str)); 

        sprintf (tmp_str, "col5%09d", i); 

        sqlite3_bind_text (stmt, 5, tmp_str, -1, SQLITE_STATIC); 

        

        memset (tmp_str, 0, sizeof(tmp_str)); 

        sprintf (tmp_str, "col6%09d", i); 

        sqlite3_bind_text (stmt, 6, tmp_str, -1, SQLITE_STATIC); 

        

        if (SQLITE_DONE != (rc = sqlite3_step(stmt))) 

        { 

            printf ("sqlite3_step error code is [%d]\n", rc); 

            sqlite3_finalize(stmt); 

            sqlite3_close(db); 

            return -1; 

        } 

    } 




After I compiled and ran my test program, I found the data in ins_test table 
was not what I want. Data in ins_test was as following. I was so confused that 
why all the data in every columns starting with col6. Is there anything wrong 
with my test code using sqlite3_bind_text? 

sqlite> select * from ins_test order by col1,col2,col3 limit 10; 

col6000000000|col6000000000|col6000000000|col6000000000|col6000000000|col6000000000
 

col6000000001|col6000000001|col6000000001|col6000000001|col6000000001|col6000000001
 

col6000000002|col6000000002|col6000000002|col6000000002|col6000000002|col6000000002
 

col6000000003|col6000000003|col6000000003|col6000000003|col6000000003|col6000000003
 

col6000000004|col6000000004|col6000000004|col6000000004|col6000000004|col6000000004
 

col6000000005|col6000000005|col6000000005|col6000000005|col6000000005|col6000000005
 

col6000000006|col6000000006|col6000000006|col6000000006|col6000000006|col6000000006
 

col6000000007|col6000000007|col6000000007|col6000000007|col6000000007|col6000000007
 

col6000000008|col6000000008|col6000000008|col6000000008|col6000000008|col6000000008
 

col6000000009|col6000000009|col6000000009|col6000000009|col6000000009|col6000000009
 

sqlite> 




 I also attached my full test program in attachment. Please help. Thanks a lot! 








_______________________________________________ 
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