cpp mysql lmysqlcppconn call procedure
drop procedure if exists insert_into_t5_sp5; delimiter // create procedure insert_into_t5_sp5(in min_idx_value int ,in max_idx_value int) begin while(min_idx_value<max_idx_value) do insert into t5 (topic ,idx) values (uuid(),min_idx_value*2); set min_idx_value=min_idx_value+1; end while; end // delimiter ;
mysql> show create procedure insert_into_t5_sp5; +--------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | Procedure | sql_mode | Create Procedure | character_set_client | collation_connection | Database Collation | +--------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | insert_into_t5_sp5 | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`rumination`@`localhost` PROCEDURE `insert_into_t5_sp5`(in min_idx_value int ,in max_idx_value int) begin while(min_idx_value<max_idx_value) do insert into t5 (topic ,idx) values (uuid(),min_idx_value*2); set min_idx_value=min_idx_value+1; end while; end | utf8mb4 | utf8mb4_0900_ai_ci | utf8mb4_0900_ai_ci | +--------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ 1 row in set (0.00 sec) mysql>
#include <algorithm> #include <chrono> #include <ctime> #include <fstream> #include <iomanip> #include <iostream> #include <memory> #include <mutex> #include <sstream> #include <thread> #include <cppconn/connection.h> #include <cppconn/driver.h> #include <cppconn/metadata.h> #include <cppconn/parameter_metadata.h> #include <cppconn/prepared_statement.h> #include <cppconn/resultset.h> #include <cppconn/resultset_metadata.h> std::string get_time_now(bool is_exact = true) { std::chrono::time_point<std::chrono::high_resolution_clock> now = std::chrono::high_resolution_clock::now(); time_t raw_time = std::chrono::high_resolution_clock::to_time_t(now); struct tm tm_info = *localtime(&raw_time); std::stringstream ss; ss << std::put_time(&tm_info, "%Y%m%d%H%M%S"); if (is_exact) { std::chrono::seconds seconds = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::high_resolution_clock::now().time_since_epoch()); std::chrono::milliseconds mills = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()); std::chrono::microseconds micros = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()); std::chrono::nanoseconds nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()); ss << "_" << std::setw(3) << std::setfill('0') << (mills.count() - seconds.count() * 1000) << std::setw(3) << std::setfill('0') << (micros.count() - mills.count() * 1000) << std::setw(3) << std::setfill('0') << (nanos.count() - micros.count() * 1000); } return ss.str(); } void print_time(const int &len) { std::thread t1([](int le) { for (int i = 0; i < le; i++) { std::cout << get_time_now() << "," << i + 1 << std::endl; std::this_thread::sleep_for(std::chrono::milliseconds(10)); } std::cout<<"Thread Id:"<<std::this_thread::get_id()<<std::endl; }, len); t1.join(); std::cout << get_time_now() << ",thread id:" << std::this_thread::get_id() << ",line:" << __LINE__ << " of " << __FUNCTION__ << std::endl; } void cpp_call_proc(const int &min_value, const int &max_value) { sql::Driver *driver = get_driver_instance(); sql::Connection *conn = driver->connect("localhost", "rumination", "Rumination0001!"); conn->setSchema("db"); std::cout << std::boolalpha << conn->isValid() << std::endl; /* drop procedure if exists insert_into_t5_sp5; delimiter // create procedure insert_into_t5_sp5(in min_idx_value int, in max_idx_value int) begin while (min_idx_value < max_idx_value) do insert into t5(topic, idx) values(uuid(), min_idx_value * 2); set min_idx_value = min_idx_value + 1; end while; end // delimiter; */ // insert_into_t5_sp5(in min_idx_value int, in max_idx_value int) sql::PreparedStatement *pstmt = conn->prepareStatement("CALL insert_into_t5_sp5(?,?)"); pstmt->setInt(1, min_value); pstmt->setInt(2, max_value); pstmt->execute(); std::cout << get_time_now() << ",thread id:" << std::this_thread::get_id() << ",line:" << __LINE__ << " of " << __FUNCTION__ << std::endl; } int main(int args, char **argv) { cpp_call_proc(atoi(argv[1]), atoi(argv[2])); std::cout << get_time_now() << ",thread id:" << std::this_thread::get_id() << ",line:" << __LINE__ << " of " << __FUNCTION__ << std::endl; }
g++-13 -g -std=c++23 -I. main.cpp -luuid -lpthread -lmysqlcppconn -o h1;
./h1 1 10
./h1 1 10; true 20231214113002_308175336,thread id:140675402647360,line:83 of cpp_call_proc 20231214113002_308275370,thread id:140675402647360,line:89 of main
mysql> select * from t5; +----+--------------------------------------+--------------------------------------+--------------------------------------+-----+ | id | name | author | topic | idx | +----+--------------------------------------+--------------------------------------+--------------------------------------+-----+ | 1 | 10e18c20-9a31-11ee-9410-080027b9fde5 | 10e18c23-9a31-11ee-9410-080027b9fde5 | 10e18c0c-9a31-11ee-9410-080027b9fde5 | 2 | | 2 | 10e3729c-9a31-11ee-9410-080027b9fde5 | 10e3729e-9a31-11ee-9410-080027b9fde5 | 10e37288-9a31-11ee-9410-080027b9fde5 | 4 | | 3 | 10e5cf45-9a31-11ee-9410-080027b9fde5 | 10e5cf47-9a31-11ee-9410-080027b9fde5 | 10e5cf20-9a31-11ee-9410-080027b9fde5 | 6 | | 4 | 10e71cd9-9a31-11ee-9410-080027b9fde5 | 10e71cdc-9a31-11ee-9410-080027b9fde5 | 10e71cc7-9a31-11ee-9410-080027b9fde5 | 8 | | 5 | 10e7f05c-9a31-11ee-9410-080027b9fde5 | 10e7f05f-9a31-11ee-9410-080027b9fde5 | 10e7f049-9a31-11ee-9410-080027b9fde5 | 10 | | 6 | 10e8f69b-9a31-11ee-9410-080027b9fde5 | 10e8f69d-9a31-11ee-9410-080027b9fde5 | 10e8f691-9a31-11ee-9410-080027b9fde5 | 12 | | 7 | 10ea06a2-9a31-11ee-9410-080027b9fde5 | 10ea06a4-9a31-11ee-9410-080027b9fde5 | 10ea0696-9a31-11ee-9410-080027b9fde5 | 14 | | 8 | 10eadb59-9a31-11ee-9410-080027b9fde5 | 10eadb5c-9a31-11ee-9410-080027b9fde5 | 10eadb45-9a31-11ee-9410-080027b9fde5 | 16 | | 9 | 10eb94ee-9a31-11ee-9410-080027b9fde5 | 10eb94f0-9a31-11ee-9410-080027b9fde5 | 10eb94da-9a31-11ee-9410-080027b9fde5 | 18 | +----+--------------------------------------+--------------------------------------+--------------------------------------+-----+ 9 rows in set (0.00 sec)