Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить из MySQL данные типа int, double и др 
:(
    Опции темы
Mackey
Дата 4.4.2013, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 4.4.2013

Репутация: нет
Всего: нет



В базе MySQL числа хранятся в виде чисел, в программе числа используются в виде чисел.
Можно ли и забирать(вставлять) из базы числа в виде чисел?
Получается слишком много бессмысленных преобразований, создающих нагрузку на процессор:
1. Число в программе преобразовываем в строку для создания запроса (SELECT * Where a>10)
2. MySQL полученное число в виде строки опять преобразовывает в число.
3. Полученные результаты опять из числа преобразовывает в строку.
4. В программе, полученное число в виде строки опять преобразовываем в число для дальнейших операций.

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

Если операций не много, на это можно не обращать внимание, а если их десятки тысяч в секунду, появляется ощутимая задержка.
Кто-нибудь знает, как эту процедуру можно ускорить?
PM MAIL   Вверх
borisbn
Дата 4.4.2013, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Для этого существуют функции xxx_bind. Я не знаю MySQL и тем более не знаю компоненты, которые ты используешь для записи/чтения, но уверен на 99,9(9)%, что в этих компонентах такие ф-ции должны быть


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Mackey
Дата 5.4.2013, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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);

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.1068 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.