我使用libpq
在表中插入浮點數。我得到這個錯誤INSERT failed: ERROR: insufficient data left in message
。使用libpq在表中插入浮點數
這裏是我的代碼庫對應的摘錄:
printf ("Enter write parameter_value");
scanf("%f", ¶meter_value);
char *stm = "INSERT INTO write_reg_set (parameter_value) VALUES ($1::double precision)";
int nparam = 1;
//set the values to use
const char *values[1] = {(char *)¶meter_value};
//calculate the lengths of each of the values
int lengths[1] = {sizeof(parameter_value)};
//state which parameters are binary
int binary[1] = {1};
PGresult *res = PQexecParams(conn,
stm,
nparam, //number of parameters
NULL, //ignore the Oid field
values, //values to substitute $1 and $2 and so on
lengths, //the lengths, in bytes, of each of the parameter values
binary, //whether the values are binary or not
0); //we want the result in text format
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "INSERT failed: %s", PQerrorMessage(conn));
exit_nicely(conn,res);
}
PQclear(res);
第一點:testlibpq2.c說ergarding OID「讓後端推斷參數類型」爲二進制和文本的例子。這就是我省略它。你的第二點是有效的。 – Jam
你認爲後端應該推斷出你傳遞的4個字節是雙精度? [文檔](https://www.postgresql.org/docs/current/static/libpq-exec.html#LIBPQ-PQEXECPARAMS)說:*如果paramTypes爲NULL,或者數組中的任何特定元素爲零,則服務器推斷參數符號的數據類型的方式與它對**無類型文字字符串**。(強調我的) –