QSqlDatabase addDatabase(const QString &type, const QString &connectionName = QLatin1String(defaultConnection))
该函数是用来把我们的数据库添加到连接列表中,
参数1:表示你是什么类型的数据库,比如sqlite的话就用QSQLITE
参数2:连接名称,表示连接该数据库的文件名字,如果有多个数据库的话,需要自己定义
返回值:就是我们的数据库句柄
数据库文件名不是连接名,数据库文件必须在使用Open打开数据库前设置好
直接使用前面设置的账号和密码打开使用第一个open,
使用是他账号密码使用第二个open
exec函数
方式1:直接在构造函数里写入要执行的sql语句,再调用exec函数执行
直接在参数const QString &query = QString()里写入要执行的sql语句,再调用
exec()函数
方式2:直接调用,把sql语句写在参数里执行
执行sql语句的结果保存在QSQLQuery的数组Value里面
next函数
检索结果中的下一条记录(如果可用),并将查询定位在检索到的记录上,该函数一般用于查找时候
一般我们都是先把数据写到数据显示模型中,再把通过模型写到表格
void setHorizontalHeaderItem(int column, QStandardItem *item)
参数说明:
int column:哪一列
QStandardItem *item:字段名即列的名字
void setItem(int row, int column, QStandardItem *item)
参数:
row:哪一行
column:那一列
QStandardItem *item:数据值
例如:
model->setItem(count,0,newQStandardItem(sql_query.value(0).toString()));
使用QTableView的成员函数setModel(模型对象)函数
使用QTableView的成员函数setModel(模型对象)函数,把数据模型设置为QTableView显示的模型
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSql>
#include <QSqlDatabase>
#include<QSqlDriver>
#include<QDebug>
#include<QSqlQuery>
#include<QSqlError>
#include<QString>
#include <QStandardItemModel>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public:
void sqlit3_init();
QSqlDatabase db;
QStandardItemModel*model;
int count=0;
void Init_model();
private slots:
void on_pushButton_3_clicked();
void on_insert_bt_clicked();
void on_delect_bt_clicked();
void on_read_bt_clicked();
void on_modify_bt_clicked();
void on_select_bt_clicked();
private:
Ui::MainWindow *ui;
QSqlDatabase *db1;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
sqlit3_init();
Init_model();
}
MainWindow::~MainWindow()
{
delete ui;
db.close();
}
void MainWindow::sqlit3_init()
{
db=QSqlDatabase::addDatabase("QSQLITE");//连接数据库
db.setDatabaseName("SQLITE.db");//数据库文件名
db.setUserName("root");//设置用户名
db.setPassword("root");//设置密码
//打印操作
qDebug()<<db.driverName();
qDebug()<<db.databaseName();
qDebug()<<db.password();
bool ok = db.open();//打开数据库文件
if (ok)
{
qDebug() << QString("数据库打开成功");
}
else
{
qDebug() << "数据库打开失败!";
}
}
//1.创建表
void MainWindow::on_pushButton_3_clicked()
{
// db.setHostName("./SQLITE.db");//设置需要连接的主机数据库
// db.setPort(6868);//设置端口
QSqlQuery sql_query;
if(! sql_query.exec("create table if not exists student (id int primary key, name text,form text,length int,radius int)"))
{
qDebug() << "Error: Fail to create table." << sql_query.lastError();
}
else
{
qDebug() << "Table created!";
}
}
//2.插入数据
void MainWindow::on_insert_bt_clicked()
{
QSqlQuery sql_query;
QString sql=QString( "insert into student values (%1,'%2','%3',%4,%5);")
.arg(ui->ID_edit->text().toInt())
.arg(ui->name_lineEdit->text())
.arg(ui->form_lineEdit_2->text())
.arg(ui->length_lineEdit_3->text().toInt())
.arg(ui->radius_lineEdit_4->text().toInt());
qDebug()<<sql;
if(!sql_query.exec(sql))
{
qDebug()<<"insert error"<< sql_query.lastError();
}
else
{
qDebug()<<"insert ok";
}
on_read_bt_clicked();//跟新数据
}
//3.读取全部数据
void MainWindow::on_read_bt_clicked()
{
model->clear();//清除表中数据
Init_model();//再次初始化模型,不然上面清除清除模型后,列的标题就没了
count=0;//每次都从第0行查询
QSqlQuery sql_query;
QString select_sql = "select * from student order by id asc";// order by 字段名 +asc 递增方式
if(!sql_query.exec(select_sql))
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())//判断下个查询数据是否可用
{
// int id = sql_query.value(0).toInt();//打印某行第一列
// int age = sql_query.value(1).toInt();
// qDebug()<
//通过QTableview表格显示数据
model->setItem(count,0,new QStandardItem(sql_query.value(0).toString()));
model->setItem(count,1,new QStandardItem(sql_query.value(1).toString()));
model->setItem(count,2,new QStandardItem(sql_query.value(2).toString()));
model->setItem(count,3,new QStandardItem(sql_query.value(3).toString()));
model->setItem(count,4,new QStandardItem(sql_query.value(4).toString()));
count++;//不断增加行数
}
}
}
//4.删除数据
void MainWindow::on_delect_bt_clicked()
{
QSqlQuery sql_query;
QString delect_sql=QString( "delete from student where id=%1").arg(ui->ID_edit->text().toInt());//根据刀具ID删除数据
if(!sql_query.exec(delect_sql))
{
qDebug()<<"delect error"<< sql_query.lastError();
}
else
{
qDebug()<<"delect succeful";
}
on_read_bt_clicked();//更新表中数据
}
//5.更新数据
//修改数据
void MainWindow::on_modify_bt_clicked()
{
QSqlQuery modify_query;
QString modify_sql=QString("UPDATE student set name='%1',form='%2',length=%3,radius=%4 WHERE id=%5;")
.arg(ui->name_lineEdit->text())
.arg(ui->form_lineEdit_2->text())
.arg(ui->length_lineEdit_3->text().toInt())
.arg(ui->radius_lineEdit_4->text().toInt())
.arg(ui->ID_edit->text().toInt());
if(!modify_query.exec(modify_sql))
{
qDebug()<<"modify error"<< modify_query.lastError();
}
else
{
qDebug()<<"modify succeful";
}
on_read_bt_clicked();//更新表中数据
}
//UPDATE students set age=20 WHERE id=2;
//依据ID查询数据
void MainWindow::on_select_bt_clicked()
{
model->clear();//清除表中数据
Init_model();//再次初始化模型,不然上面清除清除模型后,列的标题就没了
count=0;//每次都从第0行查询
QSqlQuery sql_query;
QString select_sql = QString("select *from student where id=%1 ;").arg(ui->ID_edit->text().toInt());
if(!sql_query.exec(select_sql))
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())//判断下个查询数据是否可用
{
//通过QTableview表格显示数据
model->setItem(count,0,new QStandardItem(sql_query.value(0).toString()));
model->setItem(count,1,new QStandardItem(sql_query.value(1).toString()));
model->setItem(count,2,new QStandardItem(sql_query.value(2).toString()));
model->setItem(count,3,new QStandardItem(sql_query.value(3).toString()));
model->setItem(count,4,new QStandardItem(sql_query.value(4).toString()));
}
}
}
//初始化数据模型
void MainWindow::Init_model()
{
model=new QStandardItemModel(this);
//设置列的名字
model->setHorizontalHeaderItem(0,new QStandardItem("刀具ID"));
model->setHorizontalHeaderItem(1,new QStandardItem("刀具名称"));
model->setHorizontalHeaderItem(2,new QStandardItem("加工形式"));
model->setHorizontalHeaderItem(3,new QStandardItem("刀具长度"));
model->setHorizontalHeaderItem(4,new QStandardItem("刀具半径"));
//把数据模型设置到Qtableviwe
ui->tableView->setModel(model);
}