2016-08-05 2 views
2

Я не уверен, что с этим делать, поскольку я не могу удалить двоеточие из моей строки SQL. В основном я пытаюсь выполнить строку SQL в Sqlite, используя приведенный ниже код.Sqlite 'Unrecognized token: ":" 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 

Edit: Если вы хотите, чтобы выключить его, я не думаю, что вы можете это сделать для этого call (поскольку вызов принимает флаг как часть параметров, которые могут включать его только). Вместо этого, вы можете отключить его глобально по телефону

sqlite3_config(SQLITE_CONFIG_URI, 0) 

, который говорит SQLite, чтобы отключить имя файла конвенции 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. Если вы пытаетесь получить список всех таблиц, вы не можете этого сделать.