gpt4 book ai didi

c++ - sqlite3_prepare_v2 返回错误 1 ​​代码

转载 作者:行者123 更新时间:2023-12-01 17:40:27 25 4
gpt4 key购买 nike

我想清理我的 sql 插入函数并使用准备好的语句而不是 sqlite3_exec 中的黑客字符串。我在尝试使用它时不断遇到问题。这是代码:

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

数据库.h文件:

#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

当我运行此代码时,在尝试将某些内容插入到提供的表中时出现段错误 11。我收到与准备返回 1 和 rc 为代码 21 (SQL_MISUSE) 相关的错误。我的问题是我准备的声明有什么问题吗?

最佳答案

您收到 SQL_MISUSE 错误,因为您尝试使用不存在的准备好的语句。

准备失败,因为您尝试使用表名参数。参数仅适用于表达式中的文字值,不适用于表/列名称。

关于c++ - sqlite3_prepare_v2 返回错误 1 ​​代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36433016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com