PQexecparams - 不支持绑定数组中的第三个参数

时间:2017-04-06 07:48:15

标签: c++ database postgresql

我是postgresql中的新手并尝试使用PQexecparams在db中插入值。当我在values数组中绑定两个参数时,它可以很好地工作,但是当我移动到三时它会显示错误 “INSERT失败:无法为输出缓冲区分配内存” 这是我的代码:

try{
  // Logic
} catch (Exception e){
  if(e instanceof SpecificException || e.getCause() instanceof SpecificException){
     // Handle error-1
  }
  // Handle error-2
}

2 个答案:

答案 0 :(得分:1)

您应该像这样初始化paramLengths

int paramLengths[3] = { (int)sizeof(double), 0, (int)sizeof(double) };

将双精度值的二进制表示存储为bytea字段相当奇怪,但如果您不需要在数据库中处理它,为什么不呢。这样你就不会失去精确度。

答案 1 :(得分:0)

    paramLengths[3] = 10;

您已在paramLengths中分配了一个未使用的条目,并将两个二进制模式参数的两个条目保留为未初始化。

您还假设您的主机double的本机格式与PostgreSQL的二进制double的有线格式相同。您需要确保是这种情况,或转换为文本格式。如果 将直接在values数组中传递double*值,则至少应将相应的长度字段设置为sizeof(double)