问题标签 [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.
c++ - 如何使用 SOCI 库处理减号运算符?
我需要使用 SOCI 库以与数据库无关的方式处理减号运算符。Oracle 关键字 'MINUS' 在 postgres 中不支持,相应的 postgres 关键字是 'EXCEPT' 。例如:Oracle 语法
SELECT COUNT(*) FROM (SELECT C1 FROM s1.T1 **MINUS** (SELECT C1 FROM S2.T1));
Postgres 语法
SELECT COUNT(*) FROM (SELECT C1 FROM s1.T1 **EXCEPT** (SELECT ENTITY_ID FROM C1 FROM s2.T1));
同样 SOCI 库提供了处理 nvl 的函数('''soci::session::nvl()'''),是否也有处理减号运算符的能力?
c++ - 无法将特殊符号插入 Oracle 数据库
我尝试在 Oracle 数据库表 VARCHAR2 列中添加特殊符号(即:æ_ø_å_Æ_Ø_Å____£€$&@%¿),并在以下方法中注意到不同的结果。
数据库字符集: SELECT * FROM nls_database_parameters WHERE parameter LIKE '%SET';
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET WE8MSWIN1252
使用的 SQL:
- 通过 SQL Developer 直接插入
结果 : æ_ø_å_Æ_Ø_Å_____£€$&@%¿
- 通过 SQLPlus 插入
结果 : ¿¿_¿¿_¿¿_¿¿_¿¿_¿¿_____¿¿¿¿¿$&@%¿¿
- 使用 SOCI 库通过 C++ 代码插入
结果:
使用数据库连接字符串(WINDOWS_1252 字符集)时:"oracle://service=<service> user=<user> password=<password> charset=178 ncharset=1000";
结果为
æ_ø_å_Æ_Ø_Å_____£€$&@%¿
使用数据库连接字符串(UTF_8 字符集)时:"oracle://service=<service> user=<user> password=<password> charset=871ncharset=1000";
结果是
æ_ø_å_Æ_Ø_Å_____£€$&@%¿
使用了 C++ 代码:
这种不一致行为的原因是什么?
c++ - 未定义对 soci::session::get_last_insert_id 的引用
因此,我从 souceforge 下载了 soci 4.0.0 并将其解压缩到 /tmp/ 中。然后:
我得到了:
我不关心 posgresql 失败(可能缺少一些开发文件)
但后来我尝试编译这个 socitest.cpp 文件:
我得到了这个错误:
/usr/bin/ld: /tmp/ccwEUoUG.o: 在函数main':
socitest.cpp:(.text+0x272): undefined reference to
soci::session::get_last_insert_id(std::__cxx11::basic_string, std::allocator > const&, long&)' collect2: 错误: ld 返回 1 退出地位
当我注释掉
我可以编译程序,但运行后我得到了 SIGSEGV:
我做错了什么?
c++ - 如何无错误地构建 SOCI 库?
我在构建 SOCI 库时遇到了困难。
相关软件:
- 增强版 1.73.0
- CMake 版本 3.16
- MSVC 编译器版本 19.26.28805.0
- MySQL 5.7 版
- SOCI 版本 4.0.0
相关路径:
- 升压路径是
E:\cpp\Lib\boost\boost_1_73_0
。 - CMake 的路径是
E:\Apps\CMake\share\cmake-3.16
. - MySQL 服务器的路径是
C:\Program Files\MySQL\MySQL Server 5.7\
. - MSVC 的路径是
C:\Apps\32\Microsoft\Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\bin\Hostx64\x64
.
建立 SOCI 的命令是cmake -DCMAKE_BUILD_TYPE=Debut -DSOCI_CXX11=ON -DSOCI_SHARED=ON -DWITH_BOOST=ON -DWITH_MYSQL=ON ..
这是修改后的Boost.cmake
文件,位于%SOCI%\cmake\dependencies\
. 评论开始##
解释变化。
这是相关的输出。此处提供完整输出。
执行msbuild.exe SOCI.sln
产生输出可用here。
谁能告诉我为什么 SOCI 不能正确构建?date_time
为什么当它肯定存在时却找不到该组件?
c++ - 为什么 C++ 编译器没有检测到正确声明的类?
根据错误代码,编译器 (MSVC 2019) 未检测到正确声明的类。
在下面的代码中,编译器在UACvLogin
类UACcDefault
定义中第一次提及时停止。
[\src\UAC\controllers\UACcDefault.h][1]
:
错误消息是:
我研究了代码 , C2061
, C2143
, C4430
,C2238
它们表明编译器没有检测到UACvLogin
之前已经声明的代码。
每当我采取措施减轻这些错误时,例如将代码更改UACvLogin
为不是指针时,我都会收到以下错误消息:
编译器现在关注viewLogin
变量的名称 ( ),而不是类型。如果我UACvLogin* viewLogin
从头文件中删除(该变量当前仅用于一种方法),或者取消注释该class UACvLogin;
行,编译器会将其焦点更改为UACmUsers
标识符:
如果我取消注释两个类声明class UACvLogin;
和class UACmUsers;
,编译器会抱怨 SOCI 库。我不会在这里引用错误消息。
我使用选项执行构建/P
以查看预处理器输出,并且包含将类声明放在它们应该在的位置:在UACcDefault
类中使用/引用它们之前。
有人可以帮我找出这个错误的原因吗?
整个项目在GitHub 上。
src\includes.h
../views/UACvLogin.h
=src\UAC\views\UACvLogin.h
../models/UACmUsers.h
=src\UAC\models\UACmUsers.h
cmake-build-debug-msvc-2019/UACvLogin.i
10.2MB 此文件显示UACvLogin.cpp
.cmake-build-debug-msvc-2019/UACmUsers.i
10.2MB 此文件显示UACmUsers.cpp
.cmake-build-debug-msvc-2019/UACcDefault.i
10.2MB 此文件显示UACcDefault.cpp
.
c++ - 如何绑定 SOCI 查询的输出?
以下代码:生成错误消息,如下:
dbU::Connection()
是一个生成连接字符串的函数。
iDuserid
、sDusername
和sDpassword
是 UACmUsers 的私有成员,属于 和int
类型std::string
。
indUserid
、indUsername
和indPassword
是 UACmUsers 的私有成员,类型为soci::indicator
。
有第二个重载函数搜索username
. 如果我注释掉这个函数,只剩下第二个函数,编译器会指向第二个函数中的同一点。
bool UACmUsers::GetUser(const wxString& username);
我已经尝试删除两个指标,但这并不能解决问题。
错误:
有人可以帮我让 SOCI 表现得更好吗?
c++ - soci 给出致命错误:mysql.h:没有这样的文件或目录
当我尝试编译使用 SOCI 库的程序时,我得到:
我已经检查过,我有 mysql.h 在:
我的 CMakeLists 文件是:
我试图添加:
但我知道没有包配置文件。
我还尝试重新安装 soci 和 mysql 连接器。
postgresql - SOCI/Postgresql 中的批量插入顺序
我正在使用 SOCI C++ 库的批量插入功能将记录插入到 Postgresql 表中。数据在 std::vectors 中传递给 SOCI,并且该表包含一个 SERIAL 类型的自动计数器。我预计记录将以与向量中相同的顺序插入,但计数器告诉我它们似乎以相反的顺序插入。谁能证实这一点?我可以依赖这种行为还是不能保证订单保留?这取决于 SOCI 还是 Postgresql?
c++ - 编译 SOCI 时 Cmake 找不到 PostgreSQL 库
- 操作系统:Windows 10
- 编译器:Visual Studio 2019
- SOCI 版本:4.0.2
- PostgreSQL 版本:13
- CMake 版本 L 3.20.3
我对 CMake 不太熟悉,所以如果我在做一些不知情和不正确的事情,请多多包涵。
脚步:
- 下载并执行
postgresql-13.3-2-windows-x64.exe
- 下载并执行
pgadmin4-5.3-x64.exe
- 下载并解压
SOCI 4.0.2
- 在中创建构建目录
SOCI 4.0.2
- 从构建目录中的 cmd 调用以下命令:
我得到以下输出
以下对我来说很突出:
c++11 - 为什么要调整传递给 SOCI 以进行批量获取的 std::vector 的大小?
在SOCI 手册中,它要求绑定到语句以填充数据的向量应在每次批量获取迭代时调整大小。我想这类似于无法多次读取的 DB 语句。当我们完成读取绑定向量时,它的大小已变为 0。我的问题是,由于我们将 std::vector 绑定到 SOCI(一种能够在所需方向上进行多次读取的数据结构),这是否必须如此?SOCI 是在尝试模仿数据库语句的行为,还是这是技术要求?
我的问题源于角度,如果我们可以使用这个向量来处理我们获取的数据,它将减少从绑定向量到程序数据结构的复制操作。由于我们已经在讨论批量操作,如果这是一种可能性,那将是一个巨大的节省。