|
|
|
Mackey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 4.4.2013 Репутация: нет Всего: нет |
В базе MySQL числа хранятся в виде чисел, в программе числа используются в виде чисел.
Можно ли и забирать(вставлять) из базы числа в виде чисел? Получается слишком много бессмысленных преобразований, создающих нагрузку на процессор: 1. Число в программе преобразовываем в строку для создания запроса (SELECT * Where a>10) 2. MySQL полученное число в виде строки опять преобразовывает в число. 3. Полученные результаты опять из числа преобразовывает в строку. 4. В программе, полученное число в виде строки опять преобразовываем в число для дальнейших операций. Аналогично с добавлением и изменением данных в базе. Если операций не много, на это можно не обращать внимание, а если их десятки тысяч в секунду, появляется ощутимая задержка. Кто-нибудь знает, как эту процедуру можно ускорить? |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
Для этого существуют функции xxx_bind. Я не знаю MySQL и тем более не знаю компоненты, которые ты используешь для записи/чтения, но уверен на 99,9(9)%, что в этих компонентах такие ф-ции должны быть
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Mackey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 4.4.2013 Репутация: нет Всего: нет |
Спасибо!
По наводке нашел вот что (может кому будет полезно): 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); } |
|||
|
||||
Правила форума "C++: Базы данных" | |
|
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах. Благодарим за понимание. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Базы данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |