快速增加数据
在日常开发中,比如写一个学生管理系统,需要模拟增加数据,如果一条一条的调用sql语句进行添加稍稍大量的数据就会很慢,本人亲测,比调用单个增加函数快上很多,增加两三白条数据就是那么一两秒的事
下面给一个快速的操作
第一步:首先定义一个对应的结构体类,方便操作
例:
struct StuInfo{
int id;
QString name;
quint8 age;
quint16 grade;
quint16 uiclass;
quint32 studentid;
QString phone;
QString wechat;
};
第二步:声明并定义两个添加的函数
例:
//添加学生
//添加单个学生
bool stuSql::addStu(StuInfo info)
{
QSqlQuery sql(m_db);
QString strSql = QString("insert into student values(null,'%1',%2,%3,%4,%5,'%6','%7')").
arg(info.name).
arg(info.age).
arg(info.grade).
arg(info.uiclass).
arg(info.studentid).
arg(info.phone).
arg(info.wechat);
return sql.exec(strSql);
}
//添加多个学生
bool stuSql::addStu(QList<StuInfo> l)
{
QSqlQuery sql(m_db);
m_db.transaction();
for(auto info:l){
QString strSql = QString("insert into student values(null,'%1',%2,%3,%4,%5,'%6','%7')").
arg(info.name).
arg(info.age).
arg(info.grade).
arg(info.uiclass).
arg(info.studentid).
arg(info.phone).
arg(info.wechat);
sql.exec(strSql);
}
m_db.commit();
return true;
}
第三步:调用相应的函数
//模拟学生数据
void MainWindow::on_btn_simulation_clicked()
{
QRandomGenerator g,c;
g.seed(0);
c.seed(0);
QList<StuInfo>l;
for(int i=0;i<m_lNames.size();i++){
auto grade = g.bounded(7,10);//随机生成年级 左闭右开 随机生成 7 8 9这三个数
auto uiclass = g.bounded(1,9);//随机生成班级
StuInfo info;
info.name=m_lNames[i];
if(i%3)
info.age=17;
if(i%7)
info.age=18;
if(i%2)
info.age=20;
info.grade=grade;
info.uiclass=uiclass;
info.studentid=i;
info.phone="123321";
info.wechat="123321";
//将模拟的数据放入容器,增加效率
l.append(info);
}
m_ptrStuSql->addStu(l);//调用增加函数
updateTable();//界面刷新
}