Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试创建表时会出现sql逻辑错误_C++_Sql_Sqlite - Fatal编程技术网

C++ 尝试创建表时会出现sql逻辑错误

C++ 尝试创建表时会出现sql逻辑错误,c++,sql,sqlite,C++,Sql,Sqlite,我正在尝试创建一个SQLite数据库。我创建了一个新文件,然后我想创建这个表: CREATE TABLE 'session_properties' ( 'user_name' TEXT NOT NULL, -- Name of the user. 'user_surname' TEXT NOT NULL, -- Surname of the user. 'description' TEXT NOT NULL, -- Description of the session.

我正在尝试创建一个SQLite数据库。我创建了一个新文件,然后我想创建这个表:

CREATE TABLE 'session_properties'
(
    'user_name' TEXT NOT NULL, -- Name of the user.
    'user_surname' TEXT NOT NULL, -- Surname of the user.
    'description' TEXT NOT NULL, -- Description of the session.
    CONSTRAINT 'PK_user' PRIMARY KEY ('user_name','user_surname')
)
;
这是我的代码:

void checkErrorCode(int code){
  if (code != SQLITE_OK) {
    auto message = sqlite3_errstr(code);
    throw WSession::Exception(code, message);
  }
}

…

const char CreateDatabase_sql[] = {0x43,0x52,0x45,0x41,0x54,0x45,0x20,0x54,0x41,0x42,0x4c,0x45,0x20,0x27,0x73,0x65,0x73,0x73,0x69,0x6f,0x6e,0x5f,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x69,0x65,0x73,0x27,0x0d,0x0a,0x28,0x0d,0x0a,0x09,0x27,0x75,0x73,0x65,0x72,0x5f,0x6e,0x61,0x6d,0x65,0x27,0x20,0x54,0x45,0x58,0x54,0x20,0x4e,0x4f,0x54,0x20,0x4e,0x55,0x4c,0x4c,0x2c,0x20,0x2d,0x2d,0x20,0x4e,0x61,0x6d,0x65,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x75,0x73,0x65,0x72,0x2e,0x0d,0x0a,0x09,0x27,0x75,0x73,0x65,0x72,0x5f,0x73,0x75,0x72,0x6e,0x61,0x6d,0x65,0x27,0x20,0x54,0x45,0x58,0x54,0x20,0x4e,0x4f,0x54,0x20,0x4e,0x55,0x4c,0x4c,0x2c,0x20,0x2d,0x2d,0x20,0x53,0x75,0x72,0x6e,0x61,0x6d,0x65,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x75,0x73,0x65,0x72,0x2e,0x0d,0x0a,0x09,0x27,0x64,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x27,0x20,0x54,0x45,0x58,0x54,0x20,0x4e,0x4f,0x54,0x20,0x4e,0x55,0x4c,0x4c,0x2c,0x20,0x2d,0x2d,0x20,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x65,0x73,0x73,0x69,0x6f,0x6e,0x2e,0x0d,0x0a,0x09,0x43,0x4f,0x4e,0x53,0x54,0x52,0x41,0x49,0x4e,0x54,0x20,0x27,0x50,0x4b,0x5f,0x75,0x73,0x65,0x72,0x27,0x20,0x50,0x52,0x49,0x4d,0x41,0x52,0x59,0x20,0x4b,0x45,0x59,0x20,0x28,0x27,0x75,0x73,0x65,0x72,0x5f,0x6e,0x61,0x6d,0x65,0x27,0x2c,0x27,0x75,0x73,0x65,0x72,0x5f,0x73,0x75,0x72,0x6e,0x61,0x6d,0x65,0x27,0x29,0x0d,0x0a,0x29,0x0d,0x0a,0x3b,0x0d,0x0a,0x00};
// you can change the string with this one:
// const char CreateDatabase_sql[] = "CREATE TABLE 'session_properties' ('user_name' TEXT NOT NULL, 'user_surname' TEXT NOT NULL, 'description' TEXT NOT NULL, CONSTRAINT 'PK_user' PRIMARY KEY ('user_name','user_surname'));\0";
const unsigned CreateDatabase_sql_size = sizeof(CreateDatabase_sql);
sqlite3_stmt* statement;
sqlite3* m_database;
checkErrorCode(sqlite3_open_v2("MyDatabase.myExt", &m_database, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, nullptr));
checkErrorCode(sqlite3_prepare_v2(m_database, CreateDatabase_sql, -1, &statement, nullptr));
checkErrorCode(sqlite3_step(statement));
checkErrorCode(sqlite3_finalize(statement));
CreateDatabase\u sql[]
由用于嵌入.sql文件的脚本创建

如果我运行此代码,
sqlite3\u prepare\u v2
返回错误
1-SQL逻辑错误
。如果我手动运行查询(例如,使用),它将正常工作并创建表


我做错了什么?

这是一个经过清理、可编译的独立版本的代码(带有更好的错误消息、错误修复(查看
sqlite3\u step()
返回的内容),并从sql语句中删除了一堆奇怪的东西(单引号用于字符串,双引号用于标识符,但通常不需要,为什么在末尾有一个文本
\0
字符?)

#包括
#包括
#包括
无效检查错误代码(sqlite3*db,整数代码){
如果(代码!=SQLITE\u确定&&code!=SQLITE\u完成){
常量字符*错误;
中频(db){
err=sqlite3_errmsg(db);
}否则{
err=sqlite3\u errstr(代码);
}

std::cerr CreateDatabase_sql的东西到底是什么?只需使用一个普通的人类可读字符串。正如我所说,这是我用于将外部文件嵌入可执行文件的脚本的结果。我想在示例中进行维护,以使代码尽可能类似于给我带来问题的代码。它正是为创建表而编写的SQL脚本。嗯,当代码中最重要的内容无法读取时,很难提供帮助。已更新,但结果是一样的。表名周围有单引号。在我看来,这似乎是一个简单的印刷错误。
$ ./a.out
It seems to have worked.
$ ./a.out
Error 1: table session_properties already exists