Ich wollte meine SQL-Einfügefunktion bereinigen und vorbereitete Anweisungen anstelle einer gehackten Zeichenfolge in sqlite3_exec verwenden. Ich bekomme Probleme, wenn ich versuche, es zu benutzen. Hier ist der Code:sqlite3_prepare_v2 Rückgabe Fehler 1 Code
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 Datei:
#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
Wenn ich diesen Code ausführen, erhalte ich eine seg Fehler 11, wenn sie versuchen, etwas in die vorgesehene Tabelle einzufügen. Ich bekomme Fehler im Zusammenhang mit der Vorbereitung der Rückgabe von 1 und RC Code 21 (SQL_MISUSE). Meine Frage ist, was stimmt nicht mit meiner vorbereiteten Aussage?
Um eine Fehlermeldung zu erhalten, rufen Sie [sqlite3_errmsg()] (http://www.sqlite.org/c3ref/errcode.html) auf. –