我应该在MySQL connector/c++中使用哪个执行函数?

我应该在MySQL connector/c++中使用哪个执行函数?,c++,mysql,mysql-connector,C++,Mysql,Mysql Connector,我需要编写一个基于MySQL Connector/C++的包装器,它封装特定的SQL语句并提供用户友好的界面,如:插入、更新、删除、选择等 在MySQL的原生C API中,每个SQL语句都可以通过调用MySQL_real_query来执行,但是现在,在MySQL Connector/C++中,事情变得有些混乱。sql::Station类中有3个执行函数,sql::PreparedStatement类中有6个执行函数: mysql-connector-c++-1.1.5\driver\mysql\

我需要编写一个基于MySQL Connector/C++的包装器,它封装特定的SQL语句并提供用户友好的界面,如:插入、更新、删除、选择等

在MySQL的原生C API中,每个SQL语句都可以通过调用MySQL_real_query来执行,但是现在,在MySQL Connector/C++中,事情变得有些混乱。sql::Station类中有3个执行函数,sql::PreparedStatement类中有6个执行函数:

mysql-connector-c++-1.1.5\driver\mysql\u statement.h:

bool execute(const sql::SQLString& sql);
sql::ResultSet* executeQuery(const sql::SQLString& sql);
int executeUpdate(const sql::SQLString& sql);
mysql-connector-c++-1.1.5\driver\mysql\u prepared\u statement.h,104:

bool execute();
bool execute(const sql::SQLString& sql);

sql::ResultSet executeQuery();
sql::ResultSet executeQuery(const sql::SQLString& sql);

int executeUpdate();
int executeUpdate(const sql::SQLString& sql);
我想知道为什么有这么多的执行函数,而不是一个简单和统一的? 我应该使用哪个execute函数来指定SQL语句


注意:我使用的是MySQL Connector/C++1.1.5,MySQL Server 5.6作为后端。

这三个函数中的每一个都有特定的用途,可以从它们的返回类型猜出

处决 此函数是最通用的函数。它返回一个布尔值,如果查询返回多个结果,则该值为true;如果查询未返回任何结果或更新计数,则该值为false

如果您只想使用一个尽可能通用的函数,那么这就是您想要使用的函数

如果返回true,则需要使用ResultSet*getResultSet来获取结果。 如果返回false,则需要使用uint64\u t getUpdateCount获取更新的行数

执行查询 此函数直接返回一个对SELECT语句有用的ResultSet,并假设确实存在要返回的结果集

它相当于调用execute,后跟getResultSet

当您知道正在使用返回结果(如行)的SQL代码时,您将希望使用此函数

执行更新 此函数返回一个整数值,该整数值对UPDATE语句很有用,并假定要返回一个UPDATE计数

它相当于调用execute,后跟getUpdateCount,尽管出于某种原因,返回类型与uint64\t不同

这是执行修改数据的SQL语句时要使用的函数,您需要知道是否修改了某些数据

所以

为什么有这么多执行函数,而不是一个简单统一的函数

统一的一个实际上是execute,它可以用来执行任意SQL并适当地处理结果,而另外两个是在您知道执行哪种查询时方便的包装器

我应该使用哪个execute函数来指定SQL语句

在您的例子中,因为您正在围绕SQL语言编写一个包装器,所以每个函数都知道它将执行哪种类型的语句,因此使用便利函数将允许您编写更短的代码

例如:

insert(), update(), delete() ---> executeUpdate()
select()                     ---> executeQuery()

谢谢大流士,你的回答清晰而详细。非常感谢。我觉得这个解释很有帮助。然而,在基于此实现一些代码时,我确实发现了一个问题。PreparedStatements不支持getUpdateCount。源代码显式抛出异常:throw MethodNotImplementedExceptionMySQL\u Prepared\u语句::getUpdateCount;。这是1.1.8的来源