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

时间:2014-12-15 09:18:48

标签: c++ mysql mysql-connector

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

在MySQL的本机C API中,只需调用" mysql_real_query()" 即可执行每个SQL语句,但现在,在 MySQL Connector中/ C ++ ,事情变得有点困惑。 sql :: Statment 类中有 3 执行函数, sql :: PreparedStatement 6 执行函数>上课:

mysql-connector-c ++ - 1.1.5 \ driver \ mysql_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_prepared_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);

我想知道为什么会有这么多执行功能而不是简单统一的执行功能呢? 并且我应该使用哪个执行函数来指定SQL语句?

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

1 个答案:

答案 0 :(得分:13)

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

执行

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

如果您只想使用一个尽可能通用的功能,这是您想要使用的功能。

如果返回true,则您需要使用ResultSet * getResultSet()来获得结果 如果它返回false,您将需要使用uint64_t getUpdateCount()来获取更新的行数。

的executeQuery

此函数直接返回ResultSet,这对SELECT语句很有用,并假设确实存在要返回的结果集。

相当于拨打execute()后跟getResultSet()

当您知道使用返回行等结果的SQL代码时,您将需要使用此函数。

的executeUpdate

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

相当于调用execute()后跟getUpdateCount(),即使由于某种原因,返回类型也不同(int vs uint64_t)。

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

所以,

  

为什么有这么多的执行功能而不是简单统一的呢?

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

  

我应该使用哪个执行函数来指定SQL语句?

在您的情况下,由于您正在编写SQL语言的包装器,因此每个函数都知道它将执行哪种语句,因此使用便捷函数将允许您编写更短的代码。

例如:

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