Sqlite'无法识别的令牌:“:”C ++

时间:2016-08-05 00:30:39

标签: c++ sql string sqlite

我不知道该怎么办,因为我无法从SQL字符串中删除冒号。 基本上我正在尝试使用下面的代码在Sqlite中执行SQL字符串。

    string database_name = "C:/Programs_C++/Project/Databases/dbase.db";

    string exec_string = "SELECT * FROM " + database_name + " WHERE type='table'";

    dbase_return=sqlite3_open_v2(database_name.c_str(),&db_handle,SQLITE_OPEN_READWRITE,NULL);


dbase_return_tbl=sqlite3_get_table(db_handle,exec_string.c_str(),&result,&row,&column,&error_msg);

    //But I get the error: unrecognized token: ":" ?

我如何解决这个问题?感谢

2 个答案:

答案 0 :(得分:1)

您可以{strong> SELECT,而不是数据库。

首先打开数据库(使用文件名),然后执行有效的SQL语句,如

SELECT * FROM myTable;

SELECT * FROM C:/Programs_C++/Project/Databases/dbase.db WHERE type = 'table'无效的SQL。如果您要获取所有表的列表,则不能这样做。

答案 1 :(得分:-1)

看起来你已经开启了URI filenames - 这可以在编译时或运行时完成(如果你不了解它,可能是编译时间)。

如果启用了URI文件名,则需要将文件名更改为:

file:///C:/Programs_C++/Project/Databases/dbase.db

编辑:如果你想关闭它,我不认为你可以为这一次调用做到这一点(因为调用带有一个标志作为参数的一部分,只能打开它)。相反,您可以通过调用

来全局禁用它
sqlite3_config(SQLITE_CONFIG_URI, 0)

告诉sqlite全局禁用URI文件名约定。注意:你只需要调用一次并且它不是线程安全的,所以可能只是把它放在程序的开头。

但是,在完全关闭之前,URI文件名是否对您有用可能值得研究。