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();//刷新表格
}