问题描述
PostgreSQL在插入带有单引号的字符串时,必须在单引号前面再加一个单引号,否则插入数据会出错。解决思路举例
INSERTINTO"public"."student"("id","name")VALUES(1,'da''hai');INSERTINTO"public"."student"("id","name")VALUES(1, E'da\'hai');- C++实现 在带有单引号的字符串的单引号前再加一个单引号
#include<iostream>#include<list>usingnamespace std;/*
查找、替换和插入字符串
*//*
由于PostgreSQL在插入带有单引号的字符串时,必须在单引号前面再加一个单引号,否则插入数据会出错。
INSERT INTO "public"."student"("id", "name") VALUES(1, 'da''hai');
INSERT INTO "public"."student"("id", "name") VALUES(1, E'da\'hai');
*//// <summary>/// 在带有单引号的字符串的单引号前再加一个单引号/// </summary>/// <param name="str">带有单引号(英文)的字符串</param>/// <returns>返回std::string</returns>
std::string addSingleQuotationMark(std::string str){
std::list<int> pos_list;
std::list<int>::iterator iter_pos;for(size_t i =0; i < str.size(); i++){int pos = str.find("'", i);if(pos >-1){
pos_list.push_back(pos);}}//去掉重复的元素
pos_list.unique();int k =0;for(iter_pos = pos_list.begin(); iter_pos != pos_list.end(); iter_pos++){
str.insert(*iter_pos + k,"'");
k++;}return str;}intmain(){
string str ="N'SGOM'A'";
cout <<addSingleQuotationMark(str)<< endl;
string aa ="123'456";
cout <<addSingleQuotationMark(aa)<< endl;
cout <<addSingleQuotationMark("")<< endl;int pos = str.find("'",0);if(pos >-1){//替换字符
str.replace(pos, pos,"*");
cout <<"str="<< str << endl;//插入字符
str.insert(pos,"'");
cout <<"str="<< str << endl;}return0;}

发布评论