我是postgresql中的新手并尝试使用PQexecparams在db中插入值。当我在values数组中绑定两个参数时,它可以很好地工作,但是当我移动到三时它会显示错误 “INSERT失败:无法为输出缓冲区分配内存” 这是我的代码:
try{
// Logic
} catch (Exception e){
if(e instanceof SpecificException || e.getCause() instanceof SpecificException){
// Handle error-1
}
// Handle error-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)
。