Я создаю файл базы данных sqlite3 (назовите его db.sl3; интерактивно вызывается как $ sqlite3 db.sl3
из оболочки) из программы командной строки sqlite3, например
create table people (
id integer,
firstname varchar(20),
lastname varchar(20),
phonenumber char(10)
);
insert into people (id, firstname, lastname, phonenumber) values
(1, 'Fred', 'Flintstone', '5055551234');
insert into people (id, firstname, lastname, phonenumber) values
(2, 'Wilma', 'Flintstone', '5055551234');
insert into people (id, firstname, lastname, phonenumber) values
(3, 'Barny', 'Rubble', '5055554321');
Я пытаюсь использовать это в написанной мной программе, использующей C sqlite3 C API; однако всякий раз, когда я пытаюсь открыть файл базы данных в программе C, используя либо
sqlite3* db;
rc = sqlite3_open( "db.sl3", &db );
или
rc = sqlite3_open_v2( "db.sl3", &db, SQLITE_READONLY, 0 );
, за которым следует запрос, где SQL содержится в следующей строке
std::string sqlCmd = "select * from sqlite_master where type='table' order by name";
для интерфейса sqlite3_get_table wrapper
, вызываемого следующим образом
rc = sqlite3_get_table( db, sqlCmd.c_str(), &result, &numRows, &numCols, &errorMsg );
Код возврата (rc
) в любом случае равен 0, что означает, что с операцией не было проблем, но в таблице result
нет записей таблицы. Я пробовал все виды проблем с маршрутизацией (например, использование абсолютных путей к файлу db, относительные, только в каталоге вызовов и т. Д.), Но безрезультатно. Кроме того, когда я снова открываю файл базы данных с помощью программы командной строки sqlite3, я вижу таблицы и их записи. Кроме того, если я открою, создаю и вставляю строки в таблицу в программе на Си, я могу получить к ним доступ в порядке.
Любая помощь будет принята с благодарностью. Я не правильно инициализирую вещи?