2013-06-05 4 views
1

Я могу обновить запись в таблице с помощью строковых манипуляций, которые имеют некоторую слабость.
Итак, теперь я пытаюсь обновить параметры, но это не так, как я думал.PostgreSQL, libpq/C, параметры обновления

sprintf(sql, "%s%s%s%s%s%d%s", 
    "UPDATE ", mytable, " SET ", 
    "my_id=$0, mystr1=$1, mystr2=$2, myint=$3, mydouble=$4", 
    "WHERE my_id='", local_my_id, "'"); 

const char *values[5] = 
{local_my_id, local_mystr1, local_mystr2, local_myint, local_mydouble}; 

result = PQexecParams(conn, sql, 5, NULL, values, NULL, NULL, 0); 

Значения 1 и 4 являются целыми числами, а значение 5 является двойным, что не вписывается в массив const char.
Я пробую то же самое со строками, и он работает.

Если мне нужно преобразовать числа в строки, которые не кажутся логичными.

Как это сделать правильно?

ответ

2

Может показаться логичным преобразовать числа в строки, но это именно то, что вы должны сделать, если используете текстовый протокол по умолчанию. Подумайте об использовании the libpqtypes library, который позаботится об этом множестве.

Вы можете использовать двоичный протокол (по принципу «по параметрам», см. Документацию по адресу PQexecParams) ... но в целом вам лучше использовать текстовый протокол. Это часто происходит быстрее в сети, особенно для большого количества небольших номеров, и вам не нужно беспокоиться о проблемах с контентом и номером, если вы используете текстовый протокол.

+0

я вижу. В этой ситуации libpqtypes кажутся очень привлекательными. Я пытаюсь скомпилировать, но не могу. Здесь есть место для загрузки двоичных файлов Windows этой библиотеки? –

+0

@ user973238 Ах, вы в Windows. Весело. Мне еще не нужно работать с libpqtypes в Windows, поэтому вы сами по себе. Если вы не найдете что-либо после выполнения подходящего поиска, попросите рассказать о списках рассылки или опубликовать новый вопрос SO. –