Qt配置数据库的使用参考连接:https://subingwen.cn/qt/sql-driver/
1、连接数据库
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");//数据库服务器IP
db.setPort(3306); //端口号
db.setUserName("root"); //用户名
db.setPassword("123456"); //数据库密码
db.setDatabaseName("Table_Name"); //数据库名
bool ok = db.open();
if (ok){
qDebug()<<"link success";
}
else {
qDebug()<<"link failed because"<<db.lastError().text();
}
2、查找数据库
QSqlQuery q_select(db);
q_select.prepare("SELECT * FROM slice_v2");
q_select.exec(); //运行数据库
//查找方式1:按表头的列数去查找,列数从0开始
QList<int> cpu;
while(q_select.next())//遍历每一行
{
cpu.append(q_select.value(22).toInt());
}
//查找方式2:按表头的名字去查找
QList<int> cpu;
while(q_select.next())
{
cpu.append(q_select.value("cn_cpu").toInt());
}
数据库筛选WHERE:
1、方式一:
QSqlQuery q_select(db);
q_select.prepare("SELECT * FROM slice_v2 WHERE TRIM(status)='11'");
//选择表元素status的值为"11" 利用WHERE进行条件的选择
q_select.exec(); //运行数据库
2、方式二:
QSqlQuery q_select(db);
q_select.prepare("SELECT * FROM slice_v2 WHERE slice_name = :slice_name");
q_select.bindValue(":slice_name", str_name);
//选择name的值为str_name的那行 利用WHERE进行条件的选择
q_select.exec();
3、对数据库插值
QSqlQuery query;
// 准备插入值的SQL语句
query.prepare("INSERT INTO slice_v2 (slice_name,slice_type,num_ue,cn_storage,cn_cpu,bw_limit) "
"VALUES (:slice_name,:slice_type,:num_ue,:cn_storage,:cn_cpu,:bw_limit)");
query.bindValue(":slice_name", str_name);
query.bindValue(":slice_type", "control");
query.bindValue(":num_ue", str_num);
query.bindValue(":bw_limit", str_bps);
query.bindValue(":cn_cpu", str_cpu);
query.bindValue(":cn_storage", str_storage);
query.exec();
4、更新数据库
QSqlQuery q_update(db);
q_update.prepare("UPDATE slice_v2 SET bw_limit = :bps, cn_cpu = :cpu, cn_storage = :storage WHERE slice_name = :name");
//WHERE 为筛选表的条件,选择name元素为sliceArray[i].slice_name的那一行进行更新
q_update.bindValue(":name", sliceArray[i].slice_name);//sliceArray[i].slice_name为要更新的具体数值
q_update.bindValue(":bps", sliceArray[i].bandwidth+remainingBandwidth - (str_bps.toFloat()-have));
q_update.bindValue(":cpu", sliceArray[i].cpu);
q_update.bindValue(":storage", sliceArray[i].storage);
if (q_update.exec()) {
qDebug() << "Update query executed successfully.";
} else {
qDebug() << "Update query failed:" << q_update.lastError().text();
}
5、删除
QSqlQuery q_delete(db);
q_delete.prepare("DELETE FROM slice_v2 WHERE slice_name = :name");
q_delete.bindValue(":name", str_name);
q_delete.exec();
//删除name为str_name的那一行的记录
6、注意
每次查找值时都需要用next遍历才行!!!我有时候会忘
//每次查找值时都需要用next遍历才行!!!我有时候会忘
QSqlQuery q_select(db);
q_select.prepare("SELECT * FROM slice_v2 WHERE slice_name = :slice_name");
q_select.bindValue(":slice_name", str_name);
q_select.exec();
while(q_select.next()) //遍历
{
QString name = q_select.value("slice_name").toString();
}