Note that there are some explanatory texts on larger screens.

plurals
  1. POHow can I re-use a MySQL++ query object to call multiple stored procedures?
    primarykey
    data
    text
    <pre><code>#include &lt;iostream&gt; #include &lt;mysql++.h&gt; using namespace std; int main() { // Get database access parameters from command line const char* db = "enet", *server = "192.168.1.108", *user = "root", *pass = "123456"; // Connect to the sample database. mysqlpp::Connection conn(false); conn.set_option(new mysqlpp::MultiStatementsOption(true)); if (conn.connect(db, server, user, pass)) { mysqlpp::Query query = conn.query(); query &lt;&lt; "call CreateTable('test1', 'generic', 0, 1, 2, 3,4,5,6,7,8,9,10,NOW());"; query.execute(); query.reset(); query &lt;&lt; "call CreateTable('test2', 'generic', 0, 1, 2, 3,4,5,6,7,8,9,10,NOW());"; query.execute(); query.reset(); return 0; } else { cerr &lt;&lt; "DB connection failed: " &lt;&lt; conn.error() &lt;&lt; endl; return 1; } return 0; } </code></pre> <p>I want to use mysql++ query to execute procedure "CreateTable" many times, and i reset the query at last, but no matter how, just the first query works, the last does not, my problem is that: how to make all of queries work? </p> <pre><code>-- create table -- delimiter $$ drop procedure if exists CreateTable $$ create procedure CreateTable( IN tableName VARCHAR(20), IN dbName VARCHAR(20), IN INT_RegDevID INTEGER, IN Dec_Long DECIMAL(24,16), IN Dec_Lat DECIMAL(24,16), IN Dec_Height DECIMAL(10,6), IN Dec_Direction DECIMAL(10,6), IN AverageSpeed DECIMAL(10,6), IN Dec_Base VARCHAR(10), IN MCC INTEGER, IN MNC INTEGER, IN LAC INTEGER, IN CI INTEGER, IN Dec_LocaDate TIMESTAMP) -- ------------------------------------------------------------------------------- -- ------------------------------------------------------------------------------- begin -- the test variable -- Warning: the encoding can result many problem!!! declare varTableName VARCHAR(32) default NULL; set @varTableName = NULL; set @table_prefix = "posinfo_"; set @table_params = "( `Int_LocaID` int(11) NOT NULL auto_increment, `INT_RegDevID` int(11) NOT NULL default '0', `Dec_Long` decimal(24,16) NOT NULL default '0.0000000000000000', `Dec_Lat` decimal(24,16) NOT NULL default '0.0000000000000000', `Dec_Height` decimal(10,6) NOT NULL default '0.000000', `Dec_Direction` decimal(10,6) NOT NULL default '0.000000', `Dec_ MaxSpeed` decimal(10,6) NOT NULL default '0.000000', `Dec_ MinSpeed` decimal(10,6) NOT NULL default '0.000000', `AverageSpeed` decimal(10,6) NOT NULL default '0.000000', `Var_PosInfo` varchar(50) character set latin1 NOT NULL default '', `Var_Remark` varchar(200) character set latin1 NOT NULL default '', `Date_LocaDate` timestamp NOT NULL default CURRENT_TIMESTAMP, `Dec_Base` varchar(10) character set latin1 NOT NULL, `MCC` int(11) NOT NULL COMMENT '', `MNC` int(11) NOT NULL COMMENT '', `LAC` int(11) NOT NULL COMMENT '', `CI` int(11) NOT NULL COMMENT '', PRIMARY KEY (`Int_LocaID`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=gbk;"; set @varCreate = CONCAT("create table ", dbName,".",@table_prefix, tableName, @table_params); -- the insert operation set @insertOperation = CONCAT("insert into ", dbName,".",@table_prefix, tableName, "(INT_RegDevID,Dec_Long,Dec_Lat,Dec_Height,Dec_Direction,AverageSpeed, Dec_Base,MCC,MNC,LAC,CI,Date_LocaDate) values(",INT_RegDevID,",",Dec_Long, ",",Dec_Lat,",",Dec_Height,",",Dec_Direction,",",AverageSpeed,",",Dec_Base, ",",MCC,",",MNC,",",LAC,",",CI,",NOW())"); -- find the target table -- Look care about the "' '" ! set @getTargetTable = CONCAT("select TABLE_NAME into @varTableName from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='", dbName, "' and TABLE_NAME='", @table_prefix, tableName,"'"); -- ------------------------------------------------------------------------------- -- ------------------------------------------------------------------------------- PREPARE getTargetTable from @getTargetTable; execute getTargetTable; select @varTableName; set varTableName = @varTableName; if varTableName is NULL then -- create new table PREPARE newTable from @varCreate; execute newTable; -- do insert operation PREPARE insertOperation from @insertOperation; execute insertOperation; else -- do insert operation PREPARE insertOperation from @insertOperation; execute insertOperation; end if; end $$ delimiter ; </code></pre> <p>above, are the procedure.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload