Qt-Day15-学习笔记

Qt 使用数据库

  • 1. mysql
    • 1.1. 检查当前Qt支持的数据库
    • 1.2. Qt连接MySql数据库
    • 1.3. 连接MySQL数据库后对数据进行增删改查
    • 1.4. 事务的处理
  • 2. SQLlite
    • 2.1. 查看当前qt支持的数据库
    • 2.2. 连接SQLlite数据库
    • 2.3. 建表
    • 2.4. 查找
  • 3. modeView
    • 3.1. 在tableView控件上显示 表格
    • 3.2. 在tableView控件上对数据进行增删改查

1. mysql

1.1. 检查当前Qt支持的数据库

    qDebug()  << QSqlDatabase::drivers();

1.2. Qt连接MySql数据库

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

QSqlDatabase:QMYSQL driver not load 之Qt与MySQL连接报错的解决办法

//连接mySql数据库
    db.setHostName("127.0.0.1");    //ip地址
    db.setUserName("root");
    db.setPassword("12345678");
    db.setDatabaseName("histudents");//数据库名

    if(!db.open()){
        QMessageBox::warning(this,"错误","连接数据库失败");
        return;
    }
    qDebug()  << "连接数据库成功!";

1.3. 连接MySQL数据库后对数据进行增删改查

//1 建表
    //语句:  create table 表名(字段名 类型(大小) 主键限制,字段名 类型(大小),...);
    //例如: create table student(id int primary key,name varchar(256));
    //  create table histudent(id int primary key auto_increment,name varchar(256),age int,score int);
    QSqlQuery query;

    //query.exec("create table histudent(id int primary key auto_increment,name varchar(256),age int,score int);");
    //2 插入
    /*
    语句:insert into 表名(字段名,字段名,...) values(数据,数据,...);
    例如:
        insert into histudent(id,name,age,score) values(1,'张三',33,333);
        insert into histudent(id,name,age,score) values(2,'lisi',44,444);
        insert into histudent(name,age,score) values('wangwu',55,555);
        insert into histudent(name,age,score) values('赵六',66,6666);

    query.exec("insert into histudent(id,name,age,score) values(2,'lisi',44,444);");
    query.exec("insert into histudent(name,age,score) values('wangwu',55,555);");
    query.exec("insert into histudent(name,age,score) values('赵六',66,6666);");
//3 删除
    /*
    语句:delete from 表名 where 限定语句;
    例如:delete from histudent where name='张三';
    */
    query.exec("delete from histudent where name='张三';");
    //4 查询
    /*
    语句: select 字段名,字段名,... from 表名 where 限定表达式;
    例如:
        select * from histudent;
        select id,name from histudent;
        select * from histudent where age=1111;
    */

    //query.exec("select * from histudent;");

    while(query.next()){
        qDebug() << query.value(0).toInt() << query.value(1).toString()
                 << query.value(2).toInt() << query.value(3).toInt() ;
    }


    query.exec("select * from histudent where age=1111");

    while(query.next()){
        qDebug() << query.value(0).toInt() << query.value("name").toString()
                 << query.value("age").toInt() << query.value("score").toInt() ;
    }

1.4. 事务的处理

//删除
void Widget::on_btnDelete_clicked()
{
    QString name = ui->lineEdit->text();
    QString sql = QString("delete from histudent where name = '%1';").arg(name);
    //启动事务
    QSqlDatabase::database().transaction();

    QSqlQuery query;
    query.exec(sql);
}
//确定
void Widget::on_btnSure_clicked()
{
    QSqlDatabase::database().commit();
}
//取消
void Widget::on_btnCancel_clicked()
{
    QSqlDatabase::database().rollback();
}

Qt-Day15-学习笔记_第1张图片

2. SQLlite

2.1. 查看当前qt支持的数据库

  qDebug() << QSqlDatabase::drivers();

2.2. 连接SQLlite数据库

//添加数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    //设置连接的数据库
    db.setDatabaseName("../histudent.db");
    //连接
    if(!db.open()){
        QMessageBox::warning(this,"失败","连接数据库失败");
        return;
    }
    qDebug() << "连接数据库成功!";

2.3. 建表

    //建表
    QSqlQuery query;
    query.exec("create table histudent(id int primary key,name varchar(256),age int,score int);");

    //占位
    query.prepare("insert into histudent(name,age,score) values(?,?,?)");

    //准备数据
    QVariantList nameList;
    nameList<<"关羽"<<"张飞" <<"赵云" <<"马超" << "黄忠";
    QVariantList ageList;
    ageList<<2080<<2070<<2060<<2050<<2100;
    QVariantList scoreList;
    scoreList<< 99<<66<<77<<33<<12;

    //绑定
    query.addBindValue(nameList);
    query.addBindValue(ageList);
    query.addBindValue(scoreList);
    //添加
    query.execBatch();

2.4. 查找

   //查找
    query.exec("select * from histudent;");

    while(query.next()){
        qDebug() << query.value(0).toInt() << query.value(1).toString()
                 << query.value("age").toInt() << query.value("score").toInt();
    }

3. modeView

//查看当前qt支持的数据库
    qDebug() << QSqlDatabase::drivers();
    //添加mysql数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    //设置数据库连接的 参数
    db.setHostName("127.0.0.1");    //地址
    db.setUserName("root");         //用户名
    db.setPassword("12345678");     //密码
    db.setDatabaseName("student");  //数据库名

    //连接数据库
    if(!db.open()){
        QMessageBox::warning(this,"错误","数据库连接失败");
        return;
    }

    qDebug() << "连接数据库成功!";

3.1. 在tableView控件上显示 表格

    //1. 创建模型对象
    pSqlTableView = new QSqlTableModel(this);
    //2. 设置表格
    pSqlTableView->setTable("histudent");
    //3. 显示表格
    //3.1 把模型和控件关联
    ui->tableView->setModel(pSqlTableView);
    //3.2 显示表格
    pSqlTableView->select();

    //设置只读
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

    //不允许在界面上通过编辑tableView来修改
    pSqlTableView->setEditStrategy(QSqlTableModel::OnManualSubmit);

3.2. 在tableView控件上对数据进行增删改查

//查询
void Widget::on_btnSelect_clicked()
{
    QString name = ui->lineEdit->text();

    QString str = QString("name = '%1'").arg(name);
    pSqlTableView->setFilter(str);

    pSqlTableView->select();

}
//添加
void Widget::on_btnAdd_clicked()
{
    //1 获取一条空记录
    QSqlRecord record = pSqlTableView->record();
    //2 获取到当前记录条数
    int num = pSqlTableView->rowCount();
    //3 添加空行
    pSqlTableView->insertRecord(num,record);                         
}
//删除
void Widget::on_btnDelete_clicked()
{
    //1. 获取用户选中的
    QItemSelectionModel* pItem =  ui->tableView->selectionModel();
    //2. 获取到用户选中的每一条
    QModelIndexList list = pItem->selectedRows();
    //3. 循环删除
    for(int i=0;i<list.size();i++)
        pSqlTableView->removeRow(list.at(i).row());
}
//确定
void Widget::on_btnSure_clicked()
{
    pSqlTableView->submitAll();
}
//取消
void Widget::on_btnCancel_clicked()
{
    pSqlTableView->revertAll();
    pSqlTableView->submitAll();
}

Qt-Day15-学习笔记_第2张图片

你可能感兴趣的:(学习笔记,qt)