1.连接
可以参考博客
2.常用操作实例
这里都是做MaoExpress(软件设计课作业)的后端代码片段
需要注意
在操作时记住用Navicat观察服务器数据库上的数据是否更新成功。
2.1查询
查询userID是否与已有ID重复
QSqlQuery result = db.exec(" select * from SuperUserTable");
QString userIdValue;
QString pswValue;
QString nameValue;
while(result.next()){
userIdValue=result.value("userID").toString();
nameValue=result.value("_name").toString();
pswValue=result.value("_password").toString();
if(userID==userIdValue){
isRedundant=true;
}/*if(userID.toInt()==userIdValue)*/
}/*while(result.next())*/
2.2增加
下面这种给准备prepare的SQL语句设置几个参数的情况,除了下面给出的qsQuery.bindValue()
还有另一种写法 qsQuery.addbindValue()
参考博客
QString strSqlText("insert into StationUserTable (userId,_name,_password,siteId)\
values (:userId,:_name,:_password,:siteId)");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":userId",userID);
qsQuery.bindValue(":_name",name);
qsQuery.bindValue(":_password",pw);
qsQuery.bindValue(":siteId",userSiteId);
bool result_successed =qsQuery.exec();
if(result_successed){
qDebug()<<"插入用户信息成功";
}else{
qDebug()<<"插入用户信息失败!";
qDebug()<<"error open database because"<<db.lastError().text();
}
2.3更新
这里有一个修改昵称的例子,这里有一点要注意,如果字符串有中文信息,那么它的两边的单引号不能少。
其次,若拼接的字符串为其它类型(例如int)转QString类型,会出现不报错但修改失败的情况
QSqlQuery query(db);
bool res = query.exec(QString("UPDATE "+ whichTableToFind + " SET _name='" + newName + "' where userId='" + globalUserId+"'" ));
if(res){
qDebug() << "修改_name成功";
globalUserName = newName;
}
else{
qDebug()<<"table"<<whichTableToFind<<"newname"<<newName<<query.lastError();
qDebug() << "修改失败"<<db.lastError().text();
}
(下为摘抄)
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("UPDATE UserInput SET AssessDate = :AssessDate \
WHERE ID = :ID");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":AssessDate", userInputData.m_assessDate);
qsQuery.bindValue(":ID", id);
qsQuery.exec();
CommitDB(qsQuery);
2.4删除
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("DELETE FROM UserInput WHERE ID = :ID");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":ID", id);
qsQuery.exec();
CommitDB(qsQuery);
3.补充
3.1 exec() 中的字符串是所执行的SQL语句,支持运算符 ‘+’
比如
QString whichTableToFind="xxxtable"
QSqlQuery result = db.exec(" select siteId from " + whichTableToFind); //查询是否为站点管理员
resSite = result.value("siteId").toString();