sqlite c api вставка привязки

Я пытаюсь использовать вызовы функций sqlite3_bind_* для вставки значений в sqlite DB.

Вот код, который я использую:

#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;
}

Сбой программы после вызова sqlite3_step(). Сообщение об ошибке "неизвестная ошибка".

Можете ли вы помочь мне решить эту проблему? Спасибо Пракаш

1 ответ

Решение

sqlite3_step() не возвращает SQLITE_OK в случае успеха; Вы должны проверить SQLITE_DONE (и SQLITE_ROW для запросов).

Другие вопросы по тегам