MySQL C ++ / Connector setClientOption支持多个语句

时间:2013-12-06 09:16:09

标签: c++ mysql mysql-connector

我有一个用C ++编写的MySQL客户端。我想启用这里描述的MultipleStatement选项,但对于C ++当然:

http://dev.mysql.com/doc/refman/5.0/en/c-api-multiple-queries.html

在谷歌上找不到这个。此外,无法找到C ++ / Connector的任何文档。这非常令人沮丧。

如果有人知道我的问题的任何解决方案或任何非常有帮助的文档页面。

谢谢

2 个答案:

答案 0 :(得分:3)

这对我有用:

sql::ConnectOptionsMap connection_properties;

connection_properties["hostName"]=sql::SQLString("localhost");
connection_properties["userName"]=sql::SQLString("username");
connection_properties["password"]=sql::SQLString("password");
connection_properties["CLIENT_MULTI_STATEMENTS"]=(true);

sql::Driver * driver = get_driver_instance();
std::unique_ptr<sql::Connection> con(driver->connect(connection_properties));

此致

答案 1 :(得分:0)

我有这个工作,这是我用过的代码:

#include <mysql_connection.h>
#include <driver.h>
#include <exception.h>
#include <resultset.h>
#include <statement.h>

using namespace std;
using namespace sql;

Driver *m_dDBDriver;
Connection *m_cDBConn;

m_dDBDriver = get_driver_instance();
m_cDBConn = m_dDBDriver->connect(url,user,pass);
m_cDBConn->setSchema(schema);

Statement *stmt;
ResultSet *res;

stmt = m_cDBConn->createStatement();

sQSQL = "CALL multiExecute('SELECT 1;SELECT 2;');";
stmt->execute(sQSQL);

do {
  res = stmt->getResultSet();
  while (res->next()) {
    cout << "Value: " << res->getString(1) << "\n";
  }
} while (stmt->getMoreResults());

请注意,我一直在寻找能够捆绑查询的解决方案,而不是专门调用存储过程,以下是在MySQL中启用此功能的存储过程:

DROP PROCEDURE IF EXISTS multiExecute;

DELIMITER $$

CREATE PROCEDURE multiExecute(VQuery VARCHAR(1000))
BEGIN

DECLARE VQueryExecuteLen INTEGER;

IF RIGHT(VQuery, 1) != ';' THEN SET VQuery = CONCAT(VQuery, ';'); END IF;

WHILE INSTR(VQuery, ";") > 0 DO

    SET VQueryExecuteLen = INSTR(VQuery, ";");

    SET @VQueryExecute = LEFT(VQuery, VQueryExecuteLen); 

    PREPARE stmt FROM @VQueryExecute;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;    

    SET VQuery = RIGHT(VQuery, CHAR_LENGTH(VQuery) - VQueryExecuteLen);

END WHILE;

END$$

DELIMITER ;

CALL multiExecute('SELECT 1; SELECT 2');

这是否比单独启动每个查询更快或更慢取决于代码和数据库之间的网络基础结构的滞后,尽管在我的情况下,解决方案在捆绑查询时的速度方面是比较的。

如果您在实施方面遇到任何问题,请回复。

此致

詹姆斯