数据库增删改查:
Qt里面有很多和操作数据库相关的类库:
QSqlQuery对象
查询:
getid=ui->inputid->text(); //获取文本内容
QSqlDatabase::database().contains(); //数据库开始一个事务
QSqlQuery query; //建立查询语句
query.exec("select * from usertable");
while(query.next()) //遍历
{
if(getid==query.value("账号").toString()) //把找到的信息显示
{
QString getpw=query.value("密码").toString();
QString getname=query.value("姓名").toString();
QString getnumber=query.value("手机").toString();
QString getemail=query.value("邮箱").toString();
ui->pw->setText(getpw); //把内容显示
ui->name->setText(getname);
ui->number->setText(getnumber);
ui->email->setText(getemail);
break;
}
}
QSqlQuery对象提供了next()方法对数据表进行遍历,query.exec()是个重载的函数,参数可以是sql语句,但必须是QString类型的字符串。
插入:
QSqlQuery query;
//插入数据
query.prepare("INSERT INTO INSTRUTABLE(仪器编号,监测地点,仪器描述)VALUES(?,?,?);");//?是占位符
query.addBindValue(getid);
query.addBindValue(ui->space->text());
query.addBindValue(ui->info->toPlainText());
if(query.exec())
{
[=](){
QMessageBox *tip=new QMessageBox;
tip->setAttribute(Qt::WA_DeleteOnClose);
tip->question(this,"提示","添加成功",QMessageBox::Ok);
}();
}
query对象可以直接执行sql语句,字段对应的值可以用?作为占位符,利用成员方法addBindValue()就可以用变量代替?,
修改:
QString newpw=ui->pw->text(); //获取输入的文本内容
QString newname=ui->name->text();
QString newnumber=ui->name->text();
QString newemail=ui->email->text();
QString newid=ui->id->text();
QSqlDatabase::database().contains(); //数据库开始一个事务
//更新数据
QSqlQuery query;
query.prepare("UPDATE USERTABLE SET 密码=?,姓名=?,手机=?,邮箱=? where 账号=?;");
query.addBindValue(newpw);
query.addBindValue(newname);
query.addBindValue(newnumber);
query.addBindValue(newemail);
query.addBindValue(newid);
if(query.exec())
{
[=](){
QMessageBox *tip=new QMessageBox;
tip->setAttribute(Qt::WA_DeleteOnClose);
tip->question(this,"提醒","修改成功",QMessageBox::Ok);
}();
}
删除:
QString sql=QString("delete from usertable where 账号='%1'").arg(getid);
query.exec(sql);
[=](){
QMessageBox *tip=new QMessageBox;
tip->setAttribute(Qt::WA_DeleteOnClose);
tip->question(this,"提示","删除成功",QMessageBox::Ok);
}();
QString对象也可以占位,如果有对个参数,只需用不同的占位符QString("%1,%2,%3").arg(str1,str2,str3);注意QString的占位符不能一样。