postgresql
  • libpq
  • 2013-06-05 40 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問題。 –

    相關問題