QT学习(mysql连接和操作)

QT学习(mysql)

mysql的连接

***.pro添加

QT       += core gui sql

用到的头文件:

#include <QSqlDatabase>
#include <QtDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>

连接数据库代码:

 //连接数据库
    db.setHostName("127.0.0.1");//数据库服务器IP
    db.setPort(3306);
    db.setUserName("root");//数据库用户名
    db.setPassword("123456");//密码
    db.setDatabaseName("info");//使用的数据库

    //打开数据库
    if(!db.open())
    {
        QMessageBox::warning(this,"错误",db.lastError().text());
        return;
    }
    else
    {
        qDebug() << "打开了";
    }

绑定数据库:

 QSqlQuery query(db);//绑定要访问的数据库

mysql的表的创建

创建表:

 query.exec(" create table student(id int primary key auto_increment, name varchar(255), age int, score int);");

mysql的表的增、查、改、删

插入数据:

query.exec(" insert into student(id, name, age, score) values(1, 'mike', 18, 76);");//插入单条数据
//批量插入数据
//ODBC
//预处理语句:占位符: +自定义名字
    query.prepare(" insert into student(name, age, score) values(?, ?, ?);");//预处理语句
    QVariantList nameList,ageList, scoreList;//给字段设置内容 list
    nameList << "小米" << "华为" << "三星";
    ageList <<33 <<43 <<55;
    scoreList << 59 << 69 << 100;
    //给字段绑定(可以不按照顺序,有占位符: +自定义名字)
    query.bindValue(":name",nameList);
    query.bindValue(":age",ageList);
    query.bindValue(":score",scoreList);
    //执行预处理命令
    query.execBatch();
  
    //Orcle
    //预处理语句:占位符: +自定义名字
    query.prepare(" insert into student(name, age, score) values(:name, :age, :score);");
    QVariantList nameList,ageList, scoreList;//给字段设置内容 list
    //给字段设置内容 list
    nameList << "张三" << "李四" << "王五";
    ageList <<11 <<45 <<66;
    scoreList << 59 << 69 << 79;
    //给字段绑定相应的值,按顺序绑定;id号自动添加
    query.addBindValue(nameList);
    query.addBindValue(ageList);
    query.addBindValue(scoreList);
    //执行预处理命令
    query.execBatch();

查找数据:

 //查找数据
    //query.exec("select * from student");//从表中遍历每一行
    query.exec("select * from student where name = '华为'");//从表中遍历name为华为的行
    while(query.next())//一行一行遍历
    {
        //取出当前行的内容,取得时候按列来取
        qDebug() << query.value(0).toInt()
                 << query.value(1).toString()
                 << query.value("age").toInt()
                 << query.value("score").toInt();

    }

更改数据:

query.exec("update student set score = 100 where name = '华为'");

删除数据:

query.exec("delete from student where name = '华为'");

mysql的界面数据表的增、查、改、删

按钮控件的操作:
界面如下:
在这里插入图片描述
头文件:

#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>
#include <QSqlQueryModel>
#include <QSqlRecord>
#include <QSqlTableModel>

部分具体代码:

/*************************************************
  Function:       on_pushButton_clicked
  Description:    建立模型将数据库的数据导入到表格中
  Called By:      on_buttonDel_clicked()//删
                  on_buttonSel_clicked()//查
                  on_buttonIns_clicked()//增
                  on_buttonUpd_clicked()//改
  Table Accessed: worker
  Table Updated:  worker
  Output:         在QTableView上显示数据库信息
*************************************************/
void Widget::on_pushButton_clicked()
{
    static QSqlQueryModel *mode  = new QSqlQueryModel(ui->tableView);//建立一个Model
    mode->setHeaderData(0,Qt::Horizontal,QObject::tr("id"));//模型头部
    mode->setHeaderData(1,Qt::Horizontal,QObject::tr("姓名"));
    mode->setHeaderData(2,Qt::Horizontal,QObject::tr("职位"));
    mode->setHeaderData(3,Qt::Horizontal,QObject::tr("年龄"));
    mode->setHeaderData(4,Qt::Horizontal,QObject::tr("工资"));
    mode->setQuery(QString("select * from worker"));
    mode->sort(1,Qt::AscendingOrder);//根据某个特定的顺序排列下来--此处好像不对
//    QTableView *view = new QTableView;//新建一个表界面
//    view->setModel(mode);
//    view->show();
//    view->resize(600,600);
    ui->tableView->setModel(mode);

}

/*************************************************
  Function:       on_buttonDel_clicked()
  Description:    当删除按钮点击后删除指定人姓名
  Calls:          on_pushButton_clicked()//用于QTableView刷新
  Table Accessed: worker
  Table Updated:  worker
  Input:          在输入框输入要删除的人名
  Output:         输出删除后QTableView
*************************************************/
void Widget::on_buttonDel_clicked()
{
    QString name = ui->lineEdit->text();//获取行编辑内容
    QString delsql = QString("delete from worker where name = '%1'").arg(name);//注意里面最后不带;号  删除信息
    QSqlDatabase::database().transaction();
    QSqlQuery query;//绑定要访问的数据库
    query.exec(delsql);
    QSqlDatabase::database().commit(); //执行删除
    on_pushButton_clicked();//刷新表格
}

/*************************************************
  Function:       on_buttonSel_clicked()
  Description:    当查找按钮点击后查找指定人姓名
  Calls:          on_pushButton_clicked()//用于QTableView刷新
  Table Accessed: worker
  Table Updated:  worker
  Input:          在输入框输入要查找的人名
  Output:         通过QMessageBox输出查找到的信息
*************************************************/
void Widget::on_buttonSel_clicked()
{
    QString name = ui->lineEdit_2->text();//获取行编辑内容
    QString selsql = QString("select * from worker where name = '%1'").arg(name);//注意里面最后不带;号 信息查找
    QSqlDatabase::database().transaction();
    QSqlQuery query;//绑定要访问的数据库
    query.exec(selsql);
    while(query.next())//一行一行遍历
    {
        //取出当前行的内容,取得时候按列来取
        QString inf = "ID:" + query.value(0).toString() + " 姓名:" + query.value(1).toString()
                + " 职位:" + query.value(2).toString() + " 年龄" + query.value(3).toString()
                + " 工资:" + query.value(4).toString();//连接查到的信息
        QMessageBox::information(this,tr("结果") ,inf);//输出信息

    }
}

/*************************************************
  Function:       on_buttonIns_clicked()
  Description:    当添加按钮点击后添加相应数据
  Calls:          on_pushButton_clicked()//用于QTableView刷新
  Table Accessed: worker
  Table Updated:  worker
  Input:          在五个输入框输入相应的新增信息
  Output:         输出添加后新的表格数据
*************************************************/
void Widget::on_buttonIns_clicked()
{
    QString id = ui->l_Id->text();//获取行编辑内容
    QString name = ui->l_Name->text();
    QString position = ui->l_Position->text();
    QString age = ui->l_Age->text();
    QString salary = ui->l_Salary->text();
    QString inssql = QString("insert into worker(id, name, position, age, salary) values('%1','%2','%3','%4','%5')")
            .arg(id, name, position, age, salary);//注意里面最后不带;号 信息添加
    QSqlDatabase::database().transaction();
    QSqlQuery query;//绑定要访问的数据库
    if(query.exec(inssql))
    {
        QString id = tr("%1").arg(query.value(0).toInt());
        ui->comboBox_1->addItem(id);//取出当前行的内容
    }
    QSqlDatabase::database().commit(); //执行
    on_pushButton_clicked();//刷新表格
}

/*************************************************
  Function:       on_buttonUpd_clicked()
  Description:    当修改按钮点击后修改指定ID下的指定内容
  Calls:          on_pushButton_clicked(),用于QTableView刷新
  Table Accessed: worker
  Table Updated:  worker
  Input:          在下拉框选中指定修改信息,在输入框输入修改后的值
  Output:         输出修改后新的表格数据
*************************************************/
void Widget::on_buttonUpd_clicked()
{
    QString temp_1 = ui->comboBox_1->currentText();//获取下拉框内容
    QString temp_2 = ui->comboBox_2->currentText();
    QString temp_3 = ui->lineEdit_3->text();//获取输入框内容
    QString upsql;
    if(temp_2 == "姓名")//判断下拉框内容
    {
        upsql = QString("update worker set name = '%1' where id = '%2'").arg(temp_3,temp_1);//注意里面最后不带;号 信息更新
    }
    else if(temp_2 == "职位")
    {
        upsql = QString("update worker set position = '%1' where id = '%2'").arg(temp_3,temp_1);//注意里面最后不带;号
    }
    else if(temp_2 == "年龄")
    {
        upsql = QString("update worker set age = '%1' where id = '%2'").arg(temp_3,temp_1);//注意里面最后不带;号
    }
    else if(temp_2 == "工资")
    {
        upsql = QString("update worker set salary = '%1' where id = '%2'").arg(temp_3,temp_1);//注意里面最后不带;号
    }
    QSqlDatabase::database().transaction();
    QSqlQuery query;//绑定要访问的数据库
    query.exec(upsql);
    QSqlDatabase::database().commit(); //执行
    on_pushButton_clicked();//刷新表格
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值