由于qt中没有原生的执行sql文件的方法。因此我们需要根据sql文件中的流的特点,将其分解成一个个语句单独执行。
1.首先通过Qfile读取sql文件
2.将sql文件中的内容通过“;”进行拆解
3.对拆解后的内容,依次进行执行exec语句。
int excute_sql_file(const char * sql_file_path)
{
int iRet = ;
QFile qfile(sql_file_path);
if (!qfile.exists()) {
return -;
}
if (!qfile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return -;
}
QTextStream in(&qfile);
in.setCodec("UTF-8");
QString qstr_file_data = in.readAll();
QSqlQuery qsql(*m_database);
QStringList qstrlist_sql = qstr_file_data.split(";");
for (int i = ; i < qstrlist_sql.size() - ; i++) {
QString qstr_sql_part = qstrlist_sql.at(i).toUtf8();
bool sql_result = qsql.exec(qstr_sql_part);
if (!sql_result) {
QSqlError sql_error = qsql.lastError();
//std::cout << sql_error.text().toStdString() << std::endl;
//std::cout << sql_error.number() << std::endl;
iRet = -;
break;
}
} return iRet;
}