【问题标题】:Sqlite 'Unrecognized token: ":" C++Sqlite'无法识别的标记:“:”C++
【发布时间】:2016-08-05 00:30:39
【问题描述】:

我不确定该怎么做,因为我无法从我的 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: ":" ?

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

【问题讨论】:

  • exec_string 在这里无关紧要,因为您没有将它用于任何事情。
  • 已更正..我留了一条线..谢谢
  • 我确实有一个名为 dbase.db 的数据库。你能详细说明一下吗?我应该在这里写什么?我可以看到我现在可能错了。不能以这种方式从 D'base 中选择表吗?你知道我应该怎么做吗?谢谢
  • 您可以SELECT * FROM ,但不能来自数据库,除非它是我不知道的一些不寻常的 SQLite 扩展。

标签: c++ sql string sqlite


【解决方案1】:

您可以从而不是数据库中SELECT

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

SELECT * FROM myTable;

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

【讨论】:

    【解决方案2】:

    您似乎打开了URI filenames - 这可以在编译时或运行时完成(如果您不知道,可能是编译时)。

    如果打开 URI 文件名,您需要将文件名更改为:

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

    编辑:如果您想将其关闭,我认为您不能为这个调用执行此操作(因为该调用将标志作为参数的一部分,只能将其打开)。相反,您可以通过调用全局禁用它

    sqlite3_config(SQLITE_CONFIG_URI, 0)
    

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

    但是,在完全关闭 URI 文件名之前,可能值得调查一下它们是否对您有用。

    【讨论】:

    • 谢谢,我想你就在那里,但我不确定如何在我的代码中使用 SQLITE_USE_URI = 0。我想你不知道怎么做?我在代码顶部尝试了#define SQLITE_CONFIG_URI=0,但没有成功
    • 谢谢你..我也遇到了这个。虽然它没有解决问题,但它可能与我放置 sqlite3_config 的位置有关,所以我会继续尝试。不过,我认为你走在正确的轨道上,这给了我一个新的考虑。