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?
Hata mesajı almak için [sqlite3_errmsg()] 'ı (http://www.sqlite.org/c3ref/errcode.html) arayın. –