2016-04-05 32 views
0

sqlite3_exec içinde sql eklenti işlevimi temizlemek ve kesilen bir dize yerine hazırlanmış ifadeleri kullanmak istedim. Kullanmaya çalışırken sorunları almaya devam ediyorum.sqlite3_prepare_v2 dönen hata 1 kodu

void Database::insert(char* tableName,int time1,int x,int y,int z) 
{ 

int i; 
i = sqlite3_prepare_v2(db, "insert into ?1 values(?2, ?3, ?4, ?5);", -1, &stmt, NULL); 

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

std::cout <<i<< std::endl; 
sqlite3_bind_int(stmt, 2, time1); 

std::cout <<"made it int1"<< std::endl; 
sqlite3_bind_int(stmt, 3, x); 

std::cout <<"made it int2"<< std::endl; 
sqlite3_bind_int(stmt, 4, y); 

std::cout <<"made it int3"<< std::endl; 
sqlite3_bind_int(stmt, 5, z); 



rc = sqlite3_step(stmt); 
if (rc != SQLITE_OK) { 
    std::cout << "SQL error: "<< errMsg << std::endl; 
} else { 
    std::cout << "insert successfully" << std::endl; 
} 
std::cout << "boom2"<< std::endl; 
sqlite3_finalize(stmt); 
} 

database.h dosyası:: Bu kodu çalıştırdığınızda sağlanan tabloya şey eklemeye çalışırken

#ifndef DATABASE_H 
#define DATABASE_H 


#include <sqlite3.h> 
#include <iostream> 
#include <stdio.h> 

class Database 
{ 


public: 

    Database(char* name); 
    ~Database(); 
    int openConnection(char* name); 
    void insert(char* table, int vTime, int x, int y, int z); 
    void closeConnection(); 
    void createTable(char* dbName); 
    void getData(char* table, int time1); 

private: 
    sqlite3* db; 
    sqlite3_stmt *stmt; 
    char *errMsg; 
    int rc; 
    char* dbName; 
    std::string sqlStatement; 
    const char* sql; 
}; 


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

#endif // DATABASE_H 

, bir seg arıza 11 olsun İşte kodudur. Geri dönen 1 ve rc kod 21 (SQL_MISUSE) hazırlamak için ilgili hataları alıyorum. Benim sorum, hazırlamamdaki ifademde yanlış olan nedir?

+0

Hata mesajı almak için [sqlite3_errmsg()] 'ı (http://www.sqlite.org/c3ref/errcode.html) arayın. –

cevap

0

SQL_MISUSE hatası ile karşılaştığınız hazırlanmış bir deyimi kullanmaya çalıştınız.

Tablo adı için bir parametre kullanmaya çalıştığınız için hazırlık başarısız oldu. Parametreler, tablonun/sütun adlarının değil, yalnızca ifadelerde basit değerler için çalışır.

İlgili konular