2016-08-05 99 views
2

我不知道该怎么办,因为我无法从我的SQL字符串中删除冒号。 基本上我试图使用下面的代码在Sqlite中执行一个SQL字符串。Sqlite'无法识别的令牌:“:”C++

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: ":" ? 

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

+1

'exec_string'在这里是不相关的,因为你没有使用它。 – immibis

+0

更正..我离开了一条线..谢谢 – domonica

+0

我有一个名为dbase.db的数据库..你能详细说明吗?我应该在这里写什么?我可以看到我现在可能有这个错误。这种方式不能从D'base中选择表格吗?你知道我应该怎么做吗?谢谢 – domonica

回答

-1

它看起来像你有URI filenames接通 - 这可以在编译时或运行时完成(如果你不知道它可能编译时间)。

如果URI的文件名被开启,您需要将文件名更改为类似:

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

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

sqlite3_config(SQLITE_CONFIG_URI, 0) 

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

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

+0

谢谢,我认为你在那里,但我不知道如何在我的代码中使用SQLITE_USE_URI = 0。我不认为你知道如何?我已经尝试#define SQLITE_CONFIG_URI = 0在我的代码顶部,没有运气 – domonica

+0

谢谢你..我刚刚也遇到了这一点。虽然它没有解决这个问题,但它可能与我把sqlite3_config放在哪里有关,所以我会继续尝试。我认为你们正处于正确的轨道上,并且给了我一个新的考虑。 – domonica

1

您可以SELECT,而不是从一个数据库。

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

SELECT * FROM myTable; 

SELECT * FROM C:/Programs_C++/Project/Databases/dbase.db WHERE type = 'table'不是有效的SQL。如果你想获得所有表格的列表,你不能这样做。

相关问题