postgresql
  • libpq
  • 2013-06-05 42 views 1 likes 
    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数组的double值。
    我只尝试与字符串相同,它的工作原理。

    如果我必须将数字转换为看似不合逻辑的字符串。

    如何正确执行此操作?

    回答

    2

    将数字转换为字符串似乎并不合逻辑,但如果您使用默认的“文本”协议,则必须执行此操作。考虑使用the libpqtypes library,它为您处理大量这些细节。

    您可以使用二进制协议(在param-by-param的基础上,请参阅PQexecParams的文档)......但通常情况下使用文本协议会更好。它通常在网络上实际上更快,特别是对于很多小数字,并且如果使用文本协议,则不必担心字节序和数字格式问题。

    +0

    我明白了。在这种情况下,libpqtypes看起来非常有吸引力。我尝试编译但不能。在这里可以下载这个库的windows二进制文件吗? –

    +0

    @ user973238啊,你在Windows上。乐趣。我还没有需要在Windows上使用'libpqtypes',所以你自己在那里。如果在做了一些合适的搜索后没有找到任何东西,可以考虑在邮件列表上发布或发布新的SO问题。 –

    相关问题