gpt4 book ai didi

c++ - 无法从使用 C API 的程序访问使用 sqlite3 创建的表

转载 作者:行者123 更新时间:2023-11-28 08:30:20 27 4
gpt4 key购买 nike

例如,我从 sqlite3 命令行程序中生成一个 sqlite3 数据库文件(将其称为 db.sl3;从 shell 以交互方式调用 $ sqlite3 db.sl3)

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');

我正在尝试在我编写的使用 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接口(interface)如下

rc = sqlite3_get_table( db, sqlCmd.c_str(), &result, &numRows, &numCols, &errorMsg );

两种情况下的返回代码 (rc) 都是 0,这意味着操作没有问题,但是 result 变量中没有记录任何表条目。我尝试了各种路径问题(例如,使用 db 文件的绝对路径、相对路径、仅在调用目录中,等等)都无济于事。此外,当我使用 sqlite3 命令行程序重新打开数据库文件时,我可以看到表及其条目。顺便说一句,如果我在 C 程序中打开、创建这些行并将其插入到表中,我可以正常访问它们。

任何帮助将不胜感激。我没有正确初始化东西吗?

最佳答案

默认情况下,如果数据库不存在,sqlite3_open 将创建数据库(等同于使用 flags=S 调用 sqlite3_open_v2QLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE)-并且 rc 将是 SQLITE_OK

我试过了 this针对使用 sqlite3 创建的数据库的测试程序,每次(带有 people 表的现有数据库:完整路径,相对;现有 0 大小的数据库:完整路径,相对;不存在的数据库:完整路径,相对)sqlite3_open_v2 表现良好如广告所示。

尝试执行 'sqlite3 [full_path_to_db]' 然后运行查询并将结果与​​你的程序或我的程序(再次使用 [full_path_to_db])进行比较,以防万一你的 sqlite3_open 测试创建了一些0 大小的 db.sl3 然后被 sqlite3_open_v2 愉快地打开。

希望这对您有所帮助。

关于c++ - 无法从使用 C API 的程序访问使用 sqlite3 创建的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com