PostgreSQL学习总结
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。 blog.csdn/Bear_861110453/article/details/79630497
PostgreSQL 学习总结
xy
批量插⼊ Copy 命令
copy 命令⽤于批量的数据导⼊或导出
C 接⼝如下:
主要为⼀下三个函数
pRes = PQexec(pConn, strSQL.c_str());
PQputCopyData(pConn, strBuf.c_str(), strBuf.length())
PQputCopyEnd(pConn, strErrorMsg)
其中第⼀个为 执⾏SQL语句函数,可以⾃⼰查阅,主要是其所执⾏的sql语句为:COPY tablename (col1, col2, col3 ```) from stdin 表⽰启动重输⼊中向表 tablename 的列 col1、col2、col3···等插⼊数据,(并不会在此时插⼊)。
第⼆个函数则是绑定将要插⼊的数据 strBuf, 其中strBuf 对于格式有⽐较严格的要求, “col1value\tcol2value\tcol3value\n”,当其中⼀列为空时可直接省略。但不能忘记’\t’,最后⼀列后⾯’\t’换成’\n’。
第三个函数表⽰数据绑定结束,调⽤后将把数据copy如表中。
//
__int64 InsertRowBulk(PGconn *pConn, string strTableName, vector<string> fieldsName, vector<string> fieldsValue) {
if (pConn == NULL)
return false;
if (fieldsName.size() != fieldsValue.size())
return false;
PGresult    *pRes = NULL;
string      strSQL = "";
string      strBuf = "";
strSQL += "COPY ";
strSQL += strTableName;
strSQL += " ( ";
auto it = fieldsName.cbegin();
for (; it != d(); ++it)
{
strSQL += *it;
strSQL += ",";
}
strSQL.pop_back();
strSQL += " ) FROM STDIN WITH NULL AS '' ";
pRes = PQexec(pConn, strSQL.c_str());
if (PQresultStatus(pRes) != PGRES_COPY_IN)
sql容易学吗{
cout << "copy error:" << PQresultErrorMessage(pRes) << "/n SQL:" << strSQL << endl;
PQclear(pRes);
return false;
}
PQclear(pRes);
auto itr = fieldsValue.cbegin();
for (; itr != d(); ++itr)
{
strBuf += *itr;
strBuf += "\t";
}
strBuf.pop_back();
strBuf += "\n";
if (PQputCopyData(pConn, strBuf.c_str(), strBuf.length()) != 1)
{
cout << "put copy data error:" << "/n buf data:" << strBuf << endl;
return false;
}
char strErrorMsg[256];
if (PQputCopyEnd(pConn, strErrorMsg) != 1)
{
cout << "put copy end error:" << strErrorMsg << endl;
return false;
}
return true;
}
数据格式
这⾥主要介绍坑了我的 有关时间和⽇期的⼏种格式,具体包括 TIME DATE TIMESTAMP
TIME:fomate ‘HH:MM:SS’
DATA: fomate ‘YYYY-MM-DD’
TIMESTAMP: format ‘YYYY-MM-DD HH:MM:SS’
当⽤上⾯copy的⽅式绑定时要以以上格式给定string,并且 不要忘记 ”.
查询语句返回值
char* PQgetValue(PGresult*, int, int);
其中第⼀个参数为PQexec的返回结果,第⼆个参数为⾏,第三个参数为列。
这⾥提⼀句,当返回类型为上⾯提到的 TIME DATE TIMESTAMP时,其返回值为上⾯对应的格式,但是 不带 ”,记住 不带”.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。