#include #include #include #include #include "mysql.h" #include #include using namespace std; char *user = "xx", *passwd = NULL, *dbname = "test", *host="127.0.0.1"; int port = 9224; std::string PrepareSql(unsigned c,unsigned d) { std::string insert_sql = "INSERT INTO "; insert_sql.append(" tab_test "); insert_sql.append(" VALUES "); for (unsigned n = 0; n < d; ++ n) { insert_sql.append(" ('moc.naolila') , "); } int mFieldNum = 1 ; // rows for (unsigned j = 0; j < c; ++ j) { insert_sql.append("("); // columns for(unsigned i = 0; i < mFieldNum; ++ i) { insert_sql.append("?"); if (i < mFieldNum -1 ) { insert_sql.append(","); } } insert_sql.append(")"); if (j < c - 1) { insert_sql.append(", "); } } return insert_sql.append("\n"); } char * currentTime(){ time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); return asctime(timeinfo) ; } int main (int argc, char *argv[]) { if (argc < 3) { printf("\007Usage: %s \n", argv[0]); exit(0); } int binds_count = atoi(argv[1]); int dummy_count = atoi(argv[2]); MYSQL mConn; MYSQL_STMT *mStmt; mysql_init(&mConn); if (NULL == mysql_real_connect(&mConn, host, user, NULL, dbname, port, NULL, 0)) { printf ("connect to mysql failed !!\n"); } std::string set_charset = "set names utf8;"; mysql_real_query(&mConn, set_charset.c_str(), set_charset.length()); std::string create_table= "create table tab_test (a varchar(500));"; mysql_real_query(&mConn, create_table.c_str(), create_table.length()); mysql_autocommit(&mConn, false); // prepare bind parameters std::string insert_sql = PrepareSql(binds_count,dummy_count); if (insert_sql.length() < 3000) { printf ("SQL:\n %s\n", insert_sql.c_str()); } else { printf("SQL Too Long too print,Length %d !!\n",insert_sql.length()); } mStmt = mysql_stmt_init(&mConn); mysql_stmt_prepare(mStmt, insert_sql.c_str(), insert_sql.length()); //char **buf = new char *[binds_count]; MYSQL_BIND *params = (MYSQL_BIND*)malloc(sizeof(MYSQL_BIND)*binds_count); memset(params, 0, sizeof(MYSQL_BIND)*binds_count); //memset(buf, 0, sizeof(char)*binds_count ); for (unsigned i = 0; i < binds_count; ++ i) { std::string content = "aliloan.com"; char buf[] = "aliloan.com"; memcpy(buf, content.c_str(), content.length()); params[i].buffer_type = MYSQL_TYPE_STRING; params[i].buffer = buf; params[i].buffer_length = content.length(); } // bind parameter to statement for ( int r = 0 ; r < 10 ; r++ ) { if (mysql_stmt_bind_param(mStmt, params)) { printf("bind parameter to statement got error: %d , %s",mysql_errno(&mConn),mysql_error(&mConn)); } //execute if (!mysql_stmt_execute(mStmt)) { printf("Inserted %lu rows AT %s",(unsigned long)mysql_affected_rows(&mConn), currentTime()); } else { fprintf(stderr, "Insert error %d: %s\n", mysql_errno(&mConn),mysql_error(&mConn)); } mysql_commit(&mConn); } free(params); //free(buf); }