问题标签 [soci]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
248 浏览

c++ - SOCI:如何处理多列?

我正在使用 SOCI 访问 PostgreSQL 数据库。我要插入并从中选择的一个特定表(目前)有 72 列。我的问题是如何最好地处理这么多列?

我已经确定,对于选择,使用 SOCI 动态结果集可能是最好的。通过这种方式,我可以遍历列。

但是,对于插入我有困难。我想要实现的目标如下:

这样的事情可能吗?我没有找到任何以简单方式处理大量列的方法。

0 投票
1 回答
405 浏览

sqlite - soci 并不总是为 NUMERIC 列返回相同的类型

我使用 soci 库来访问 sqlite3 数据库:

(这不是我的实际代码;它被大大简化以描述问题。)

现在,大多数时候,这是有效的。但是,有时,行中索引 1 处的值是字符串,而不是 int(导致std::bad_cast异常)。对应列的 SQL 类型为NUMERIC(8) NOT NULL. 我做了一些调试,看起来行中的条目数和它们的值总是正确的。唯一的问题是这一行的值有时是一个字符串。

这可能是社会中的一个错误,也可能是我这边的错误假设。我的假设是列的返回数据类型总是相同的。类型切换可能发生在我的应用程序的一次运行中 - 值可能是一个查询结果中的 int 和下一个查询结果中的字符串。

由于我不知道底层的 sqlite3 API,我什至不确定这个问题是源自 sqlite3 还是 soci。解决方法似乎很简单:检查行值的类型,如果它是字符串,则将其转换为 int。但重要的是要知道这是预期的行为还是错误。有人可以对此发表评论吗?

编辑:

像这样插入新行:

其中bo.timestampaboost::posix_time::ptime具有以下映射:

Helper::Time将 a 转换ptime为自 1.1.1970 以来的秒数并返回。我看不出如何REP_TIMESTAMP使用此代码将字符串放入列中。

0 投票
0 回答
241 浏览

c++ - 使用 C++ 访问数据

我正在从头开始开发一个应用程序,该应用程序将安装在资源很少的系统中,它将访问一个数据库,该数据库将保存获得的数据以及其他进程可以查询该数据的位置。

最后我决定使用 C++ 和 sqlite,但我的问题是决定层用于操作数据,可能是 SOCI 或 ODB,或其他。

我必须优化用于存储和访问数据的时间,因为我在谈论传感器的信息;你推荐我用什么?,ODB?索契?其他?

0 投票
1 回答
2337 浏览

c++ - OCI(Oracle 调用接口)链接错误 - Visual Studio 2012

我正在尝试在 Windows 下编译使用 OCI(Oracle 调用接口)的SOCI( http://soci.sourceforge.net/ )。

详细信息:Visual Studio 2012,Oracle 版本 11.2.0;64 位

我找到了$(ORCALE_HOME)/OCI/LIB/MSVC图书馆。但它不会喜欢(我尝试了oraocci11.liboci.lib.

我得到的链接错误:

有任何想法吗?我真的坚持那个。

谢了,兄弟们

0 投票
1 回答
273 浏览

c++ - SOCI 的问题

我正在尝试使用 SOCI 库来轻松访问 MySQL,但我一直在安装该库。

到目前为止我所做的是:

  • 制作项目并用 CMake 编译
  • 将我的项目链接到编译后创建的 lib/release 目录。
  • 将我的项目链接到 MySQL C 连接器 lib 目录

这是我的附加包含目录: http: //puu.sh/6qGNP.png

但是不知何故,当我编译示例程序时,我得到了一堆像这样的链接器错误:

1>main.obj : 错误 LNK2019: 未解析的外部符号“public: virtual __thiscall soci::details::standard_into_type::~standard_into_type(void)” (??1standard_into_type@details@soci@@UAE@XZ) 在函数中引用公共:虚拟 __thiscall soci::details::into_type::~into_type(void)" (??1?$into_type@H@details@soci@@UAE@XZ) 1>main.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall soci::details::standard_into_type::post_fetch(bool,bool)” (?post_fetch@standard_into_type@details@soci@@MAEX_N0@Z)

我哪里搞砸了?

0 投票
1 回答
1713 浏览

c++ - SQL Server 存储过程通过 C++ 中的 SOCI/ODBC

我正在使用SOCI 库通过 ODBC 以编程方式与 SQL Server DB 交互。我无法通过存储过程中的输出参数获取值。一些代码(仿照SOCI 文档)...

我的代码没有抛出任何错误或异常,但也没有获取任何内容。我尝试了很多不同的方式(普通exec语法、ODBCcall语法等),但似乎没有任何效果。我想知道错误是否从这里回到这个......

如果省略输入/输出参数,或者为参数提供了文字,则驱动程序会丢弃输出值。

不幸的是,SOCI 似乎并不真正支持参数标记,至少据我所知。

我通过使用这种语法使代码工作......

但这并不理想,原因我认为是显而易见的。

有没有人使用过 SOCI 并且对我需要采取不同的措施来让它发挥作用有一些意见?

编辑:我收到了来自社会用户论坛/邮件列表的以下回复......

我已经有几年没有使用 SOCI 了,但我确实成功地让存储过程在 SQL Server 上与 ODBC 一起使用,2011 年底,soci 版本 2(我认为)。

我记得要做到这一点,我必须使用语句而不是过程。

我不得不修改后端以循环调用 SQLMoreResults。

我认为 SOCI 不支持输出参数,我直接使用 ODBC 处理它们,我也有一个 C++ 层。

但是,由于我是一名刚毕业的大学毕业生(本月才开始我的第一份工作!)并且相对缺乏 C++ 和数据库应用程序的经验,因此我非常感谢人们能够提供的尽可能多的帮助!例如,关于上述回应——我对最后两点并不十分清楚。

0 投票
1 回答
288 浏览

c++ - soci 库中未解决的符号错误

我了解什么是未解决的符号错误,但我不明白为什么我会在这个特定库的这种特殊情况下得到它。这是错误的输出。

请注意,我正在使用以下链接标志:

另请注意,soci::session正在解析对其他符号(例如,构造函数和析构函数)的引用。

我究竟做错了什么?是否还有另一个我应该链接的 soci 库?

编辑:请注意,我正在使用 Mac OS X,并尝试通过自制软件(通过brew install soci --with-pg)进行安装,以及 3.2.2 和 3.2.1 的独立安装。

0 投票
2 回答
407 浏览

c++ - MsgPack Woes - 析构函数,pack_raw_body 等

我正在使用作为我为C++ 数据库访问 APIMsgPack创建的自定义后端的一部分。最初,我的一些类将对象作为成员变量,但我在对象的析构函数中遇到了一些问题 - 我认为问题与引用计数其一些对象的方式以及作为被释放多个对象的基础的内存有关次。SOCISOCIMsgPack::sbufferSOCISOCIMsgPack

为了解决这个问题,我决定用MsgPack::sbuffer成员变量替换std::vector<char>成员变量,并使用这些方法填充MsgPack::sbuffers pack_raw_body。不幸的是,我也遇到了麻烦。

请考虑以下(伪)代码片段...

输出...

一般来说,我只是在弄清楚如何使用 MsgPack 对象时遇到了麻烦,并且发现文档/示例有点稀疏。人们可以提供的任何帮助将不胜感激!

0 投票
1 回答
223 浏览

c++ - 修复 lib 兼容性 c++ mingw 和 postgresql

我正在尝试将 postgresql 与 SOCI 一起使用,用 MinGW 构建他们的库。

我遇到了以下问题。

PostgreSQL 定义了这个结构@pthread.h:

但是进入编译器,也有这个结构@timeb.h

这导致 timespec 的重复声明。我的问题是:

  • 我可以在 postgresql 上编辑宏以避免被声明两次吗?
  • 如果是这样,这个time_ttimespec.tv_spec类型的差异会是一个问题吗?
  • 什么是解决这种情况的好方法?

我正在使用 PostgreSQL 9.3 x86

0 投票
0 回答
276 浏览

c++ - 如何使用 SOCI 访问 SQLite3 原生 API?

我目前正在将 SOCI 与 SQLite3 一起使用。一切正常,直到我需要调用本机 SQLite3 函数才能将自定义扩展加载到我的数据库中(http://www.sqlite.org/loadext.html)。这是我正在使用的代码:

当它到达最后一行代码时,它会在运行时给我一个分段错误。我使用调试器检查后端返回的指针是否有效,并且确实有效。我也尝试过调用其他原生 SQLite3 API 函数,它们都导致分段错误。我在这里想念什么?这些是我的代码中的包含:

我也尝试包含 sqlite3.h,但它给出了相同的结果。我正在使用clang++。有任何想法吗?