2014-12-09 6 views
1

sqlite3_bind_ * 함수 호출을 사용하여 sqlite DB에 값을 삽입하려고합니다.sqlite c api insert binding

여기 내가 사용 코드입니다 : 호출이 sqlite3_step하는 후

#include <stdio.h> 
#include "sqlite3.h" 
#include <stdlib.h> 
#include <string.h> 

static int callback(void *NotUsed, int argc, char **argv, char **azColName) { 
    int i; 
    printf("\n callback"); 
    for (i = 0; i < argc; i++) { 
     printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 
    } 
    printf("\n"); 
    return 0; 
} 

int main() { 

    int rc; 
    char *pStrSql,*zErrMsg; 
    sqlite3 *db; 
    sqlite3_stmt *pInsertStmt; 

    int iAge; 
    char *pStrName; 
    const char *pStrInsSql; 

    const char **pzTail; 


    rc = sqlite3_open("test.db", &db); 
    if (rc) { 
     fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); 
     exit(0); 
    } else { 
     fprintf(stdout, "Opened database successfully\n"); 
    } 



    pStrSql = "DROP TABLE employee"; 
    rc = sqlite3_exec(db, pStrSql, callback, 0, &zErrMsg); 

    pStrSql = "CREATE TABLE employee (name text,age int);"; 

    rc = sqlite3_exec(db, pStrSql, callback, 0, &zErrMsg); 
    if (rc != SQLITE_OK) { 
     fprintf(stderr, "SQL error: %s\n", zErrMsg); 
     sqlite3_free(zErrMsg); 
    } else { 
     printf("Table created successfully\n"); 
    } 


    pStrInsSql = "INSERT INTO employee VALUES (?,?)"; 

    rc = sqlite3_prepare_v2(db,pStrInsSql,-1,&pInsertStmt,NULL); 
    if(rc != SQLITE_OK) { 
     printf("\n Cant prepare Error %s :",sqlite3_errmsg(db)); 
     exit(0); 
    } 

    pStrName = "prakash"; 
    rc = sqlite3_bind_text(pInsertStmt,1,pStrName,-1,SQLITE_TRANSIENT); 
    if(rc != SQLITE_OK) { 
     printf("\n Cant bind text Error %s :",sqlite3_errmsg(db)); 
     exit(0); 
    } 
    iAge = 23; 
    rc = sqlite3_bind_int(pInsertStmt,2,iAge); 
    if(rc != SQLITE_OK) { 
     printf("\n Cant bind int Error %s :",sqlite3_errmsg(db)); 
     exit(0); 
    } 

    rc = sqlite3_step(pInsertStmt); 
    if(rc != SQLITE_OK) { 
     printf("\n Cant execute insert Error %s :",sqlite3_errmsg(db)); 
     exit(0); 
    } 

    sqlite3_clear_bindings(pInsertStmt); 
    sqlite3_reset(pInsertStmt); 
    sqlite3_finalize(pInsertStmt); 

    pStrSql = "select * from employee"; 

    rc = sqlite3_exec(db, pStrSql, callback, 0, &zErrMsg); 
    if (rc != SQLITE_OK) { 
     fprintf(stderr, "SQL error: %s\n", zErrMsg); 
     sqlite3_free(zErrMsg); 
    } 

    sqlite3_close(db); 

    return 0; 
} 

프로그램이 실패(). "알 수없는 오류"라는 오류 메시지.

친절하게 문제를 해결할 수 있습니까? 감사합니다 Prakash

답변

2

sqlite3_step() 성공시 SQLITE_OK를 반환하지 않습니다. SQLITE_DONE (및 쿼리의 경우 SQLITE_ROW)을 확인해야합니다.