На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > Как получить из MySQL данные типа int, double и др.
      В базе MySQL числа хранятся в виде чисел, в программе числа используются в виде чисел.
      Можно ли и забирать(вставлять) из базы числа в виде чисел?
      Получается слишком много бессмысленных преобразований, создающих нагрузку на процессор:
      1. Число в программе преобразовываем в строку для создания запроса (SELECT * Where a>10)
      2. MySQL полученное число в виде строки опять преобразовывает в число.
      3. Полученные результаты опять из числа преобразовывает в строку.
      4. В программе, полученное число в виде строки опять преобразовываем в число для дальнейших операций.

      Аналогично с добавлением и изменением данных в базе.

      Если операций не много, на это можно не обращать внимание, а если их десятки тысяч в секунду, появляется ощутимая задержка.
      Кто-нибудь знает, как эту процедуру можно ускорить?
        Использовать параметры? Например, для MSSQL в WinAPI есть функции SQLBindParameter и SQLBindCol, для привязки параметра и столбца соответственно. Думаю, что что-то подобное должно быть и для MySQL.
          Спасибо!
          По наводке нашел вот что (может кому будет полезно):
          Create an MYSQL structure to manage the MySQL connection
          ========================================================== */
          if ( (conn = mysql_init(NULL) ) == NULL )
          {
          printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
          exit(1);
          }

          /* -----------------------------------------------
          Establishes a connection to the database
          ----------------------------------------------- */
          if (mysql_real_connect(conn,server,user,passwd,database,0,NULL,0) == NULL )
          {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(1);
          }

          /* Allocate statement handler */
          MYSQL_STMT *stmt;
          stmt = mysql_stmt_init(conn);

          if (stmt == NULL)
          {
          printf("Could not initialize statement handler\n");
          exit(1);
          }


          // Prepare the statement
          // Output format: string, string, double
          const char *sql = "select fname, lname, salary from employee";

          if (mysql_stmt_prepare(stmt, sql, strlen(sql)) != 0)
          {
          printf("Could not prepare statement\n");
          exit(1);
          }


          // Bind variables
          // Output format: string, string, double

          MYSQL_BIND result[3]; // 3 variables

          char fn[100]; // fname
          char ln[100]; // lname
          double sal; // salary

          memset (result, 0, sizeof (result)); /* zero the structures */

          result[0].buffer = (void *) &fn; // first field in fn
          result[0].buffer_type = MYSQL_TYPE_STRING; // Return data as string
          result[0].buffer_length = 100;

          result[1].buffer = (void *) &ln; // Second field in ln
          result[1].buffer_type = MYSQL_TYPE_STRING; // Return data as string
          result[1].buffer_length = 100;

          result[2].buffer = (void *) &sal; // 3rd field in sal
          result[2].buffer_type = MYSQL_TYPE_DOUBLE; // Return data as double

          if (mysql_stmt_bind_result(stmt, result) != 0)
          {
          printf("Could not bind results");
          exit(1);
          }

          // Execute!!
          if (mysql_stmt_execute(stmt) != 0)
          {
          printf("Could not execute statement");
          exit(1);
          }

          // Prepare to retrieve the result
          if (mysql_stmt_store_result(stmt) != 0)
          {
          printf("Could not buffer result set");
          exit(1);
          }


          /* ===========================================
          Fetch one row at a time....
          =========================================== */
          double totalSal = 0;

          while ( mysql_stmt_fetch (stmt) == 0 )
          {
          printf("%s %s: Salary = %lf\n", fn, ln, sal );
          totalSal += sal;
          }

          printf("\nTotal Salary = %lf\n\n", totalSal );

          /* ===========================================
          Release memory space used by stmt
          =========================================== */
          mysql_stmt_free_result(stmt); /* deallocate result set */

          /* ===========================================
          Close SQL connection
          =========================================== */
          mysql_close(conn);
          }
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0254 ]   [ 17 queries used ]   [ Generated: 28.03.24, 13:40 GMT ]