2014-05-21 49 views
0

我試圖用PQputCopyData和以下代碼插入兩列。但一旦檢查到最終結果,它將顯示編碼爲UTF8的錯誤無效字節序列,並且數據沒有被插入到數據庫中。 這兩種類型的色譜柱都是character varying。我在這裏做錯了什麼?如何使用PQputCopyData插入多列

const char *buffer = "john,doe"; 

PGresult *res; 

res=PQexec(conn,"COPY john FROM STDIN DELIMITER ',';"); 
cout<<buffer; 
if(PQresultStatus(res) != PGRES_COPY_IN) 
{ 
    cout<<"copy in not ok"; 
} 
else 
{ 
    if(PQputCopyData(conn,buffer,400) == 1) 
    { 
     if(PQputCopyEnd(conn,NULL) == 1) 
     { 
      PGresult *res = PQgetResult(conn); 
      if(PQresultStatus(res) == PGRES_COMMAND_OK) 
      { 

      cout<<"done"; 
      } 
          else 
          { 
      cout<<PQerrorMessage(conn); Here I get the error invalid byte sequence for encoding "UTF8" 
          } 
     } 

     else 
     { 
      cout<<PQerrorMessage(conn); 
     } 
    } 
} 

回答

0
if(PQputCopyData(conn,buffer,400) == 1) 

什麼是錯的合格400而不是內容的實際大小buffer,使其成爲真正的數據發送後未分配的垃圾。改爲使用strlen(buffer)

你也想每行以換行符結束,所以buffer應該是:

const char *buffer = "john,doe\n"; 
+0

感謝。這解決了問題 – jibingp

+0

你能告訴我如何一次插入多行嗎?我的意思是緩衝結構應該如何?我應該在緩衝區結構中的每行之後插入\ n嗎? – jibingp

+0

@ user3660900:是,每行後面有'\ n'。如果問題解決,請[接受答案](http://meta.stackexchange.com/a/5235/231916)。 –