标准 C 语言中最简单的 SQL 实现,用于基于 linux 的 ARM 终端

Posted

技术标签:

【中文标题】标准 C 语言中最简单的 SQL 实现,用于基于 linux 的 ARM 终端【英文标题】:most simple SQL implementation in standard C to be used in linux-based ARM terminals 【发布时间】:2011-10-28 08:14:48 【问题描述】:

你知道一些开源的非常小的 SQL 服务器实现可能在 1 个 *.c(或多个)文件中,没有外部依赖项吗?实现应该是非常基本的——支持大多数简单形式的选择/插入/删除/更新...不需要 DDL(尽管拥有它会很好)。一次只有基本的 1 个用户操作 - (不需要多用户模式或解析数据库锁)。只需对一些 1 db 文件进行操作(可能在文本模式下)。 ?? 源必须是标准的便携式 C。

非常感谢!

【问题讨论】:

【参考方案1】:

显而易见的选择是SQLite。

您可以添加“-DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION”以避免外部依赖。

【讨论】:

hm,谢谢,但我已经尝试过 sqlite-amalgamation 版本,但它对于我的简单需求来说太臃肿了。最重要的是,我不能在我的系统上编译它——例如,我不能使用 posix 线程,也不能在 SQL 实现中使用多线程(一次 1 个用户对我来说就足够了)。而且我还遇到了一些其他编译错误——例如缺少声明:ftruncate、MAP_FAILED、PROT_READ、PTHREAD_MUTEX_INITIALIZER'、...还缺少外部包括: 等。的警告。所以 - 不,这太臃肿而且太依赖外部的东西了。 大多数膨胀来自于处理多用户操作。但我说我不想要多用户可扩展性——一次 1 个用户对我来说是可以的 :-) 我只需要从文件中抽象出一些 select update insert delete ... 你试过用 -DSQLITE_CONFIG_SINGLETHREAD 编译吗?还有其他配置选项可以进一步瘦身。 啊,你应该使用 -DSQLITE_THREADSAFE=0 。不过,它仍然抱怨对动态链接器的未定义引用。 如果添加 -DSQLITE_OMIT_LOAD_EXTENSION,您将避免对动态链接器的未定义引用。

以上是关于标准 C 语言中最简单的 SQL 实现,用于基于 linux 的 ARM 终端的主要内容,如果未能解决你的问题,请参考以下文章

关系数据库标准语言SQL-第六七节:视图

常用SQL_官方文档使用

T-SQL基础之简单查询

简单了解SQL(结构化查询语言)

最简单的C语言问题!!!!

C语言标准库函数strcpy与strcmp的简单实现