我应该在MySQL connector/c++中使用哪个执行函数?
我需要编写一个基于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:我应该在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\
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的来源