Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何加速c++;使用MySQL将代码循环到查询中 < C++代码子函数< /p> 将数据插入MySQL 运行循环的代码,并通过调用函数mysqlinsert2将for循环索引和值输入MySQL void write_token_to_data() { 类型定义双*动态矩阵[l+m]; //动态矩阵计数; typedef double*动态矩阵x2[l+m]; //动态矩阵2问题; 对于(int i=0;i_C++_Mysql_Sql - Fatal编程技术网

如何加速c++;使用MySQL将代码循环到查询中 < C++代码子函数< /p> 将数据插入MySQL 运行循环的代码,并通过调用函数mysqlinsert2将for循环索引和值输入MySQL void write_token_to_data() { 类型定义双*动态矩阵[l+m]; //动态矩阵计数; typedef double*动态矩阵x2[l+m]; //动态矩阵2问题; 对于(int i=0;i

如何加速c++;使用MySQL将代码循环到查询中 < C++代码子函数< /p> 将数据插入MySQL 运行循环的代码,并通过调用函数mysqlinsert2将for循环索引和值输入MySQL void write_token_to_data() { 类型定义双*动态矩阵[l+m]; //动态矩阵计数; typedef double*动态矩阵x2[l+m]; //动态矩阵2问题; 对于(int i=0;i,c++,mysql,sql,C++,Mysql,Sql,2)而言,有几点需要注意: 将打开和关闭MySQL连接移动到您的mysqlinsert方法之外。打开连接是一个缓慢的操作,因此有必要执行一次,并且只有在连接在完成之前丢失时才重新打开连接 使用准备好的SQL语句也可以加快速度 考虑使用批插入,以便一次插入N行(例如,尝试N=100) 有几句话: 将打开和关闭MySQL连接移动到您的mysqlinsert方法之外。打开连接是一个缓慢的操作,因此有必要执行一次,并且只有在连接在完成之前丢失时才重新打开连接 使用准备好的SQL语句也可以加快速度 考

2)而言,有几点需要注意:

  • 将打开和关闭MySQL连接移动到您的
    mysqlinsert
    方法之外。打开连接是一个缓慢的操作,因此有必要执行一次,并且只有在连接在完成之前丢失时才重新打开连接
  • 使用准备好的SQL语句也可以加快速度
  • 考虑使用批插入,以便一次插入N行(例如,尝试N=100)
    • 有几句话:

      • 将打开和关闭MySQL连接移动到您的
        mysqlinsert
        方法之外。打开连接是一个缓慢的操作,因此有必要执行一次,并且只有在连接在完成之前丢失时才重新打开连接
      • 使用准备好的SQL语句也可以加快速度
      • 考虑使用批插入,以便一次插入N行(例如,尝试N=100)

      您正在为每一次插入打开一个新的mysql连接,这将严重影响您的性能。打开一个连接并保持它处于打开状态,直到您完成所有插入。打开一个新连接会带来很大的开销


      还有与事务相关的开销,因此您也很可能希望每个事务执行许多插入操作。有关详细信息,请参阅以下内容:

      您正在为每个插入操作打开一个新的mysql连接,这将严重影响您的性能。打开一个连接并保持它打开,直到您完成所有插入操作。打开一个新的mysql连接连接有很大的开销


      还有与事务相关的开销,因此您也很可能希望每个事务执行许多插入操作。有关详细信息,请参阅以下内容:

      您可以进行的一些改进:

    • 将这两个函数放在一个类中,将
      MYSQL*conn_ptr
      作为该类的成员字段。这样,您的mysqlinsert2函数就不需要每次都创建和破坏连接

      类插入器{
      公众:
      MyInserter(){
      conn_ptr=mysql_init(NULL);
      如果(!conn_ptr)抛出。。。;
      conn_ptr=mysql_real_connect(conn_ptr,…);
      如果(!conn_ptr)抛出。。。;
      }
      ~MyInserter(){
      mysql_关闭(连接ptr);
      }
      bool mysqlinsert2(…){…}
      无效将\u标记\u写入\u数据(){…}
      私人:
      MYSQL*conn_ptr;
      }
      
    • 使用和。这不仅可以加快查询速度,还可以防止SQL注入攻击(即有人在您插入的字符串中插入引号字符)

    • <> L> >P>而不是使用 SaveTf,考虑使用<代码> STD::OSTRIGSWATE 。这避免了缓冲器溢出,并且可以产生更多可读代码。注意,如果您在上面做(2)以上的话,下面的代码也会改变:

      std::ostringstream out;
      
      您可以进行以下几项改进:

    • 将这两个函数放在一个类中,将
      MYSQL*conn_ptr
      作为该类的成员字段。这样,您的mysqlinsert2函数就不需要每次都创建和破坏连接

      类插入器{
      公众:
      MyInserter(){
      conn_ptr=mysql_init(NULL);
      如果(!conn_ptr)抛出。。。;
      conn_ptr=mysql_real_connect(conn_ptr,…);
      如果(!conn_ptr)抛出。。。;
      }
      ~MyInserter(){
      mysql_关闭(连接ptr);
      }
      bool mysqlinsert2(…){…}
      无效将\u标记\u写入\u数据(){…}
      私人:
      MYSQL*conn_ptr;
      }
      
    • 使用和。这不仅可以加快查询速度,还可以防止SQL注入攻击(即有人在您插入的字符串中插入引号字符)

    • <> L> >P>而不是使用 SaveTf,考虑使用<代码> STD::OSTRIGSWATE 。这避免了缓冲器溢出,并且可以产生更多可读代码。注意,如果您在上面做(2)以上的话,下面的代码也会改变:

      std::ostringstream out;
      
      我曾经尝试将mysql连接移出此函数,可能会在10,20次之后出现插入错误。我将首先尝试事务和批插入,是否有任何示例,如for loop insert??您的连接可能已丢失。您可能需要检查连接是否仍然存在,并在需要时重新创建。我曾经尝试将mysql连接移出连接退出此函数,可能在10,20次后出现插入错误我将首先尝试事务和批插入,是否有任何示例,如for loop insert??您的连接可能已丢失。您可能需要检查连接是否仍处于活动状态,并在需要时重新创建连接。批插入非常重要的是我如何保持v直到循环继续?您是指增加值吗?例如,您可以生成要插入的行数组(以您认为合适的方式更改值)然后返回与最后插入的行相对应的值。批插入非常重要的一点是,在循环继续之前,我如何保持该值?您的意思是增加该值吗?例如,您可以生成要插入的行数组(以您认为合适的方式更改值)然后返回与最后插入的行对应的值。
      bool mysqlinsert2(int sourceindex,int targetindex,string source,string target)
          {
              MYSQL *conn_ptr;
              conn_ptr = mysql_init(NULL);
      
              if(!conn_ptr)
              {
                  fprintf(stderr,"mysql_init failed\n");
                  //return EXIT_FAILURE;
              }
      
              conn_ptr = mysql_real_connect(conn_ptr,"localhost","root","nlpgroup","testdb",0,NULL,0);
      
              if(conn_ptr)
              {
                  int abc;
                  char sql_buffer[500] = {0};
                  sprintf(sql_buffer,"insert into EM2 (sourceindex,targetindex,source,target) values(\"%d\",\"%d\",\"%s\",\"%s\")",sourceindex,targetindex,source.c_str(),target.c_str());
                  if((abc = mysql_query(conn_ptr,sql_buffer)))
                  {
                      printf("error code:%s\n",mysql_error(conn_ptr));
                  }
                  mysql_close(conn_ptr);
                  return true;
                  //connection succees
              }
              else
              {
                  printf("Error code: %d  %s %s\n",mysql_errno(conn_ptr),mysql_sqlstate(conn_ptr),mysql_error(conn_ptr));
                  mysql_close(conn_ptr);
                  return false;
                  //return EXIT_SUCCESS;
              }
          }
      
      void write_token_to_data()
          {
              typedef double* DynamicMatrix[l+m];
              // DynamicMatrix Count;
              typedef double* DynamicMatrix2[l+m];
              //DynamicMatrix2 Prob;
              for(int i=0; i<(l+m); i++)
              {
                  for(int j=0; j<(l+m); j++)
                  {
                      if(mysqlinsert2(i,j,combine[i],combine[j]))
                      {
                          cout<<"insert OK!!"<<endl;
                      }
                      else
                      {
                          cout<<"insert failed"<<endl;
                      }
      
      
                  }
              }
              
          }//end of function