*********************************************************/
/*fileName是sql文件的路径, 解析出fileName中的每一条sql语句,放入到sql容器中 */
/************************************************************************/
bool DBManager::readFromSql(string fileName,vector& sql){
ifstream in(fileName.c_str(), ios::in);//linux
string signalSql,s;
if(!in){
return false;
}
while(getline(in,s)){
int pos = s.find(";");
signalSql += s;
if(pos != s.npos){//找到了一条语句的结束位
sql.push_back(signalSql);
signalSql.clear();
}
s.clear();
}
in.close();
return true;
}
/************************************************************************/
/* 导入数据库sql */
/************************************************************************/
bool DBManager::sourceSql(string fileName){
vector vecSql;
bool ret = readFromSql(fileName,vecSql);
if(ret == false){
printf("导入gamedb.sql失败");
return false;
}
for (vector::iterator it = vecSql.begin(); it != vecSql.end(); it++)
{
ExeSql((*it).c_str(), (*it).length());
}
return true;
}
我这里的source实现其实就是把sql脚本里的记录按行读取,如果遇到了一个分号,表示已经是一个语句了,把它放到一个sql语句的容器中,不知道还有没有别人有更好的方法,希望可以在这里交流,并留下你们的代码
|