问题标签 [mysql-connector-c]

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 投票
0 回答
66 浏览

c++ - C++/MySQL 插入语法问题

我正在尝试在 C++ 应用程序中构建一个插入语句以将记录推送到 MariaDB 服务器,但我从数据库返回一个通用错误,引用 MySQL 语法错误。

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 1 行的“NSERT INTO test_data (cid,ch1,ch2,ch3,ch4,.." 附近使用的正确语法

代码如下:

如果不使用“+”和“;”格式化值,代码将无法编译 在变量引用之前和之后。为什么需要这样做对我来说仍然不太有意义,但话又说回来,我仍然需要找到一个很好的参考文档来使用这个连接器,这也将不胜感激。有很多关于安装、配置和构建连接器及其应用程序的材料,但代码示例并不多。在我发现的内容中,我已经阅读了接下来我可能需要尝试使用 PreparedStatement。

此处的表架构

0 投票
0 回答
173 浏览

c++ - MariaDB 连接器 C、mysql_stmt_fetch_column() 和内存损坏

我正在开发 MariaDB 连接器 C 的包装器。有一种典型情况是开发人员不知道存储在字段中的数据的长度。正如我所知道的,获得字段实际长度的方法之一是将长度缓冲区传递给mysql_stmt_bind_result,然后通过调用mysql_stmt_fetch_column来获取每一列。但我无法理解函数mysql_stmt_fetch_column是如何工作的,因为我遇到了内存损坏和应用程序中止。

这是我努力实现目标的方式

如果我将一个数组放入mysql_stmt_fetch_column,那么我将获取唯一有效的第一个字段,所有其他字段都是垃圾。如果我将单个 MYSQL_BIND 结构放入此函数,那么我将在大约第 74 个字段上中止应用程序(有趣的是它始终是这个字段)。如果我使用另一个 MYSQL_BIND 数组,那么情况与第一种情况相同。

请帮助我了解如何正确使用它!谢谢

最小的可重现示例

0 投票
1 回答
249 浏览

c++ - 静态库 (/MT) 链接与项目 /MTd 选项冲突

我的项目链接了很多静态库。所有这些以前都链接得很好,但是现在我添加了 mysql c api 库,现在我得到了这样的错误:

mysqlclient.lib(client_authentication.obj):错误LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”不匹配:值“0”与mysql_database_connection.obj中的值“2”不匹配
mysqlclient.lib(client_authentication.obj):错误LNK2038:检测到不匹配“RuntimeLibrary”:值“MT_StaticRelease”与 mysql_database_connection.obj 中的值“MTd_StaticDebug”不匹配

但只有当我使用 MSVC 运行时库的 MTd 选项构建项目时(我使用此运行时库选项进行开发)。其他静态库链接很好。我可以通过将 MTd 更改为 MT 来修复错误,但我想使用 MTd。为什么其他静态库链接正常?编译选项相同(我自己编译的库),所有库的 MT 选项,但只有 mysql c api 无法与我的项目 MTd 选项链接。为什么?
提前致谢!

0 投票
1 回答
49 浏览

c++ - MYSQL C++ 连接器:“此声明没有存储类或类型说明符”

我创建了一个 C++ windows 窗体应用程序,我想将它绑定到数据库。但是,它一直给我一个我无法解决的错误。它突出显示了我conn的类型变量,MYSQL*只是给了我这个错误:this declaration has no storage class or type specifier. 我已链接并包含所有库,因此我不知道有什么问题。

代码:

我已经尝试将那段代码不断地移入和移出命名空间和类,希望它会产生影响,但显然不会。

错误日志:

libs我的链接和截图includes

C/C++ > General > Additional Include Directories 包含目录的第一张图片

Linker > General > Additional Library Directories 图书馆目录的第二张图片

Linker > Input > Additional Dependencies 附加依赖项的第三个图像

0 投票
1 回答
32 浏览

mysql - 尝试为 MySQL Connector/C++ 8.0.27 (Windows) 运行示例程序时出现链接器错误

介绍

几天来,我一直在尝试成功构建和运行 MySQL 连接器/C++ 8.0.27 的测试,但我觉得我正在失去理智,因为我所做的一切似乎都不起作用。我已经阅读了每一步的文档,但我仍然遇到了同样的问题。

问题

我正在运行这个测试代码,完全没有修改。我只打算将 JDBC 接口与连接器一起使用。这些是我在编译后收到的错误:

无论我使用预构建的 8.0.27 连接器/C++ 库,还是我自己从 8.0.27 Windows 源代码构建的库,我都会收到此错误。

这是我当前的 cmake 配置命令(“<path>”只是完整路径的其余部分):

我的理解是链接器错误意味着链接器无法在mysqlcppconn-static.lib中找到对象,尽管“dllimport”似乎暗示该程序正在寻找动态库,即使我只链接到mysqlcppconn-static.lib 而不是mysqlcppconn .lib


系统信息

  • 操作系统: Windows 10 专业版、21H1
  • IDE: Microsoft Visual Studio Community 2019 预览版,版本 16.11.1 预览版 1.0
  • 平台工具集: Visual Studio 2019 (v142)
  • Windows SDK 版本: 10.0
0 投票
0 回答
25 浏览

c++ - 使用 CMake 从源代码构建 MysqlConnector C++(包括 jdbc)

我从 github 呼吸 https://github.com/mysql/mysql-connector-cpp获得了最新版本的 mysql connector/c++ 源代码。为了安装它,我遵循了文档: https ://dev.mysql.com/doc/connector-cpp/8.0/en/connector-cpp-installation-source.html 。

我使用 CMake GUI 版本进行了配置并生成了 mysql 连接器/c++。3.22 为了构建和安装连接器/c++,我使用了 Visual Studio 2022 和 Visual Studio 17 2022 编译器。在构建期间,我在两个子项目中(在解决方案树中)遇到了两个问题 - 即:连接器和连接器-jdbc:

严重性代码描述项目文件行抑制状态错误MSB3073命令“setlocal”C:\Program Files\CMake\bin\cmake.exe“-DTARGET=P:/mysql-connector-cpp/_build/jdbc/Release/mysqlcppconn-static .lib -DTYPE=STATIC -DBUILD_LOG=P:/mysql-connector-cpp/_build/jdbc/Release/connector-jdbc.log.STATIC -DMSBUILD=ON -DMSVC=19.30.30709.0 -DINFO=P:/mysql-connector -cpp/_build/jdbc/INFO_BIN -DINFO_PREFIX=jdbc- -PP:/mysql-connector-cpp/_build/libutils/merge_archives.cmake if %errorlevel% neq 0 goto :cmEnd :cmEnd endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone :cmErrorLevel exit /b %1 :cmDone if %errorlevel% neq 0 goto :VCEnd :VCEnd" exited with code 1. connector-jdbc C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\ VC\v170\Microsoft.CppCommon.targets 156

我通过转到 Post-Build-Events 旁边的连接器和连接器-jdbc 子项目的属性,最后通过删除“命令行”字段中的内容来解决这个问题。

我构建并安装了连接器/c++,您可以在 github 上访问它:https ://github.com/SPiernikowski/mysqlConnector

使用 cmake gui 配置时使用的所有变量都在 CMakeCache.txt 文件中。

根据段落中的文档:“从源代码安装连接器/C++”(https://dev.mysql.com/doc/connector-cpp/8.0/en/connector-cpp-installation-source-cpp.html)“如果构建成功,它会在构建目录中创建连接器库。(对于 Windows,在与 --config 选项指定的 build_type 值相同名称的子目录中查找库。)“

我想在 Windows 上分别获取 jdbc 和 xapi 的静态库,所以:

accor.to doc:“如果您构建旧版静态库,它们具有以下名称:”

  • mysqlcppconn-static.lib (Windows) - 这是用于 jdbc

  • mysqlcppconn8-static.lib (Windows) - 这是用于 xapi

当解决方案已经构建时,以下关注:

我可以首先在 /Release/mysqlcppconn8-static.lib 中为 xapi 找到这两个文件(参见 github 上的呼吸链接是第三个),在 /jdbc/Release/mysqlcppconn-static.lib 中找到第二个用于 jdbc 的文件(参见在 github 上的呼吸链接是第三个)

问题是每个 libs 文件的体积只有 2kB。肯定出了问题,但我找不到原因。

我打开了 mysqlcppconn-static.lib 文件:在下面看到它的一部分: /DEFAULTLIB:"MSVCRT" /DEFAULTLIB:"OLDNAMES" Ś NP:\mysql-connector-cpp_build\jdbc\connector-jdbc.dir\Release\空.obj:

尽管如此,我可以找到每个子项目的库:

/xapi/Release/xapi.lib - 卷 6097kB

/jdbc/driver/Release/jdbc.lib - 卷 4413kB

/devapi/Release/devapi.lib - 卷 6073 ... 等等

已安装解决方案时的以下注意事项:

我可以在 /_install/lib64/vs14 文件夹中找到两个库:mysqlcppconn8-static.lib 和 mysqlcppconn-static.lib 但它们每个只有 2KB 卷(请参阅 _install 文件夹中 git 的 repo)

也许我在 CMake 中错误地配置了一些东西???

我补充说 mysqlcppconn-static.lib 卷应该是 55628kB

也许这个问题是微不足道的,但我看不到它。如果您发现某些事情做错了,请与我分享。